Skip to content

Latest commit

 

History

History
239 lines (137 loc) · 5.87 KB

面向对象.md

File metadata and controls

239 lines (137 loc) · 5.87 KB

JAVA面向对象知识点总结

类与对象的概念:

类就像是一个模板,而对象是类的一个实例化对象。拿生活中的例子来说,类就是一张设计图纸,而对象就是根据这张图纸建造出来的实物。

面向对象的三大特征

封装、继承、多态

封装:把同一类事物所具有的共同属性和共同行为功能抽取到Java类中的过程称为封装并将类里面的数据和行为进行保护。常用方法为:设置数据的访问修饰符为private,这样外部的事物就不能随意更改类中的数据。

继承:子类继承父类的所有非private成员。

多态:关于多态需要记住三句话:

(1)父类类型的变量可以指向子类类型的对象。

(2)能够调用什么方法取决于变量的类型。

(3)具体调用什么方法取决于对象的类型。

什么意思呢?举个例子:假设父类类型是地球人,子类类型是中国人。

代码:

class DiQiuRen {
	pulbic void speak()
	{
		System.out.println( "我是地球人" );
	}
}

class Chinese extends DiQiuRen {
	@override

	public void speak()
	{
		System.out.println( "我是中国人" ); /* 子类重写父类的speak()方法 */
	}


	public void baiNian()
	{
		System.out.println( "过年好!" );
	}
}

public class Main {
	public static void main( String[] args )
}

DiQiuRen dqr=new Chinese(); //根据多态中的第一句话,父类类型变量可以指向子类对象,即父类类型变量dqr指向子类对象

dqr.baiNian();//这句代码是有问题的,因为根据多态中第二句话,能够调用什么方法取决于变量的类型,而变量类型是地球人,可以调用的方法只有speak()方法,没有baiNian()方法。

dqr.speak();//这句代码的执行结果是“我是中国人”。解析:根据多态中第三句话,具体调用什么方法取决于对象的类型。在这里,对象的类型是中国人,所以具体执行的speak()方法是中国人类里的speak()方法。

对象间的关联关系

可以以对象作为一个类的成员变量。

例如

有Dog类:

public class Dog {
	private String name;

	public String getName()

	{
		return(name);
	}


	public void setName( String name )

	{
		this.name = name;
	}
}

Person 类 :

	 class Person()
	 {
		 private Dog pet;

		 public Dog getPet()

		 {
			 return(pet);
		 }


		 public void setPet( Dog pet )

		 {
			 this.pet = pet;
		 }


		 public void sayHello()

		 {
			 if ( this.net == null )

			 {
				 System.out.println( "我没有宠物" );
			 }else  {
				 System.out.println( "我的宠物是:" + pet.getName() );
			 }
		 }
	 }

	 Main 类 :

		public class Main {
			public static void main( String[] args )

			{
				Person p = new Person;

				Dog d = new Dog();

				d.setName( "旺财" );

				p.setPet( d ); /* 设置对象间的关联关系 */

				p.sayHello();
			}
		}

包的作用

(1)避免类重名

(2)便于管理不同用途的类

注意,包的命名:包名小写,公司域名反.产品名.模块名

例如:百度的域名是:www.baidu.com

包名则是:com.baidu.www

关于final的用法:

(1)final修饰局部变量表示这个变量只能被赋值一次;

(2)final类型的方法不能被重写;

(3)final类型的类不可以被继承。String 类就是final类。

静态static:

有时候想定义一些不和具体对象关联、不需要new就可以调用的方法(不访问成员变量的方法就可以定义成static 方法);

一些场景下会要求一个类的多个实例共享一个成员变量。这时候就要用到static。

(1)static方法可以直接通过类名.方法名调用,而非static方法则需要new。

(2)static成员不可以访问非static成员,而非static成员可以访问static成员;

static与final连用时表示常量:值不可改变且全局共享。

抽象类与接口

抽象类的特点:

(1)抽象方法没有方法体,连空方法体都不能有;一旦类中有抽象方法,这个类一定要被修饰为抽象类;

(2)抽象类是不可以被实例化的类;

(3)抽象类可以没有抽象方法;

(4)抽象类的子类必须实现父类的所有抽象方法,除非抽象类的子类也是抽象类。

接口的特点:

(1)接口中不能声明普通成员变量,只能声明static成员变量;

(2)接口可以继承其他接口。

相同点:

都有抽象方法

不同点:

(1)抽象类中可以定义方法的实现(这个方法不是抽象方法),接口中一定不能定义方法的实现;

(2)一个类只能继承一个父类,而一个类可以实现多个接口;(继承的限制)

(3)接口中不可以定义成员变量,而抽象类中可以定义成员变量。

匿名内部类

有时候创建一个类的子类只是为了创建一次它的对象,声明一个子类很麻烦,可以直接new 类名(){//类体};

这样就是相当于声明一个了这个类的子类,并创建了这个子类的对象。

注意:匿名内部类的this问题:类中的this指的是匿名内部类的对象,如果想要指外部的对象,要用“类名.this”.

equals和==

==运算时用于比较两个是否是同一个对象。如果要比较对象的内容是否相等,要调用equals()方法,返回true表示相等,false表示不相等。

类的静态代码块

静态代码块在类第一次被使用时执行一次,且在构造函数之前执行,一般用于对类进行初始化。

枚举类型

枚举类型的地位和类和接口是一样的!

为什么要有枚举?答:限定一个数据的可选值方向。例如:方向

枚举声明:

public enum Dir { Left, Right, Up, Down }

枚举类型的赋值:

Dir d=Dir.Left;

枚举类型的变量相等使用==就可以