java学习笔记03

抽象类和接口的区别

相同点

  • 都位于继承的顶端,用于被其他类实现或继承;
  • 都不能直接实例化对象;
  • 都包含抽样方法,其子类必须覆写这些抽样方法;
  • 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽样方法;
  • 一个类只能继承一个直接父类,接口可以多继承;
  • 抽象类是某个事物中应该具备的内容,而接口是这个事物额外的内容;
    **注意 : **
  • 优先选用接口,少用抽象类;
  • 需要定义子类的行为,又要为子类提供共性功能才选用抽象类;

多态

java的多态特性体现于,一个子类的对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,也可以给其父类(接口)变量赋值。
最终多态体现为:

  1. 父类的引用变量可以指向子类对象;
父类名 对象名 = new 子类名();
  1. 多态的前提是必须拥有子父类关系或者类实现接口关系,否则无法完成多态;
  2. 在使用多态后的父类引用变量调用方法时,会调用子类覆写的方法;

多态定义格式

普通类式

父类的引用变量指向子类对象:

父类类型 变量名 = new 子类类型();
变量名.方法名()* 普通类多态定义格式:
	父类 变量名 = new 子类()

抽象类定义格式

	抽象类 变量名 = new 抽象类子类()

接口多态定义格式

 接口 类名 = new 接口实现类()

注意事项:

  1. 成员变量参考的是父类中的变量,存在编译成功,否则编译失败;
  2. 成员方法编译时参考父类中的方法,存在编译成功,否则编译失败;
  3. 成员方法运行时参考子类中的方法,子类中不存在时,参考父类方法;

instanceof关键字

通过instanceof关键字来判断某个对象是否属于某种数据类型

多态-转型

  • 向上转型:当子类对象赋值给父类引用时,为向上转型,多态的本质就是向上转型的过程。
//格式
父类型行 变量名 = new 子类类型();

特点:
* 调用子类和父类共有功能,不可调用子类特有功能;

  • 向下转型:一个已经向上转型的子类对象可以使用强制类型转换转换的格式,将父类引用转为子类引用,如果直接创建父类对象,无法向下转型
//格式
子类型行 变量名 = (子类类型) 父类类型的变量;

特点:
* 可调用子类特有功能,不可调用子类和父类共有功能;
注意:
* 当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作,这时就可以使用向上转型;
* 当要使用子类特有功能时,就需要使用向下转型;
* 需要面对具体的子类对象;在向下转型时容易发生ClassCastException类型转换异常。在转换之前必须做类型判断。

Animal cat = new Cat();
Animal dog = new Dog();
if (dog instanceof Cat){
	Cat c = (Cat) dog;
    c.run;
}else{
	System.out.println("dog is not a instance of Cat");
}
>>>  dog is not a instance of Cat

封装、继承、多态的作用:

  1. 封装:把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式
  2. 继承:子类会自动拥有父类所有可继承的属性和方法。
  3. 多态:配合继承与方法重写提高了代码的复用性与扩展性;如果没有方法重写,则多态同样没有意义。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章