Java 知识点整理-3.面向对象(多态、抽象类、接口)

1、多态概述:事物存在的多种形态。

2、多态前提:要有继承关系;要有方法重写;要有父类引用指向子类对象(父类名 标识符 = new 子类名();)。

3、多态中的成员访问特点:Ⅰ.成员变量:编译看左边(父类),运行看左边(父类)。

4、多态中的成员访问特点:Ⅱ.成员方法:编译看左边(父类),运行看右边(子类)。编译时看父类有没有这个方法,运行时调用子类的这个方法。(动态绑定,这也是抽象类和接口实例化的关键)真正进栈的是子类的这个方法。如果父类没有该方法,则编译失败。如果子类没有该方法,则调用父类该方法,相当于子类继承该方法。

5、Ⅱ.成员方法:编译看左边(父类),运行看右边(子类)。编译时看父类有没有这个方法,运行时调用子类的这个方法。(动态绑定,这也是抽象类和接口实例化的关键)真正进栈的是子类的这个方法。如果父类没有该方法,则编译失败。如果子类没有该方法,则调用父类该方法,相当于子类继承该方法。

6、多态中向上转型:Person p = new SuperMan(); 父类 标识符1 = new 子类(); 父类引用指向子类对象就是向上转型。

7、多态中向下转型:SuperMan sm = (SuperMan)p; 子类 标识符2 = (子类)标识符1; 引用数据类型先有向上转型,才有向下转型。变化的都是子类对象。

8、多态的好处:Ⅰ.提高了代码的维护性(继承保证)。

9、多态的好处:Ⅱ.提高了代码的扩展性(由多态保证)。方法名(new 子类());  pubic static void 方法名(父类 形式参数){} 可以当作形式参数,可以接收任意子类对象。

开发时很少在创建对象的时候用父类引用指向子类对象,直接创建子类对象更方便,可以使用子类中的特有属性和行为。当做参数的时候用多态最好,因为拓展性强。

10、 多态的弊端:不能使用子类的特有属性和行为。

11、关键字 instanceof 判断前边的引用是否是后边的数据类型。

12、抽象类概述:抽象就是看不懂的。

13、抽象类特点:Ⅰ.抽象类和抽象方法必须用abstract关键字修饰 abstract class 类名 {} public abstract void 方法名(); 无大括号,谨记!

14、抽象类特点:Ⅱ.抽象类不一定有抽象方法(可以没有,全是成员方法,这样做的目的是不让其他类创建本类对象,交给子类完成),有抽象方法的类一定是抽象类或者是接口。

15、抽象类特点:Ⅲ.抽象类不能实例化,如果非要实例化,可以按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。父类 标识符 = new 子类(); 父类抽象方法保证编译通过,子类成员方法保证正常执行。

16、Ⅳ.抽象类的子类:要么是抽象类 abstract class 子类名 extends 父类名{} 要么重写抽象类中的所有抽象方法(强制)。

17、抽象类的成员特点:Ⅰ.成员变量:既可以是变量(数据类型 标识符 = 显示初始化值;),也可以是常量(final 数据类型 标识符 = 显示初始化值;)。abstract不能修饰成员变量。

18、抽象类的成员特点:Ⅱ.构造方法:有构造方法,用于子类访问父类数据的初始化。

19、抽象类的成员特点:Ⅲ.成员方法:既可以是抽象的,子类必须强制重写。也可以是非抽象的,子类直接继承,就可以使用。

20、抽象类的成员方法特性:Ⅰ.抽象方法 对子类声明一种规则,强制要求子类做的事情。

21、抽象类的成员方法特性:Ⅱ.非抽象方法:子类继承的事情,提高代码复用性。

22、abstract不能与static共存(非法的修饰符组合。static修饰的方法可以用类名.调用,但被abstract修饰的方法没有方法体,所以无意义)。

23、abstract不能与final共存(非法的修饰符组合。final修饰的方法不让子类重写,但被abstract修饰的方法强制子类重写,所以他俩矛盾)。

24、abstract不能与private共存(非法的修饰符组合。private修饰的方法不让子类访问,abstract修饰的方法是为了让子类看到并强制重写,所以他俩也矛盾)。

25、接口概述:从狭义的角度讲就是指java中的interface,从广义的角度讲对外提供规则的都是接口。接口编译后生成的也是字节码文件.class。

26、接口特点:Ⅰ.接口用关键字interface表示(interface 接口名 {public abstract void 方法名();})

27、接口特点:Ⅱ.类实现接口用implements表示(class 类名 implements 接口名 {public void 方法名(){}})

28、接口特点:Ⅲ.接口不能实例化,如果非要实例化,可以按照多态的方式来实例化(接口名 标识符 = new 类名(); 标识符.方法名();)。

29、接口特点:Ⅳ.接口的子类:可以是抽象类,但意义不大。可以是具体类,但要重写接口中的所有方法(父类引用指向子类对象)。(推荐)

30、接口的成员特点:Ⅰ.成员变量:只能是常量,并且是静态的并公开的(接口中定义的值是最终变量(即常量)只能访问,不能改变)。默认修饰符:pubic static final (他们仨关键字无顺序,可以互相换位置),建议自己手动给出。

31、接口的成员特点:Ⅱ.构造方法:接口没有构造方法(不能定义非抽象方法,即带有主体{}的方法)。如果一个类不写继承任何类,则默认继承Object类。那才是亲爹,接口是干爹,即使没有构造方法,子类构造方法的super():不会访问他,所以不会出错。

32、接口的成员特点:Ⅲ.成员方法:只能是抽象方法。默认修饰符:public abstract ,建议自己手动给出。

33、 静态是指可以被类名.,接口名.直接调用的成员。

34、类与类的关系:继承关系,只能单继承,可以多层继承。

35、类与接口的关系:Ⅰ.实现关系,可以单实现,也可以多实现。(class 类名 implements 接口1,接口2……{} 因为接口内的方法是抽象的,没有方法体,不会有具体的方法实现。所以类多实现接口会重写不同接口的同名方法,不会出问题 。

36、 类与接口的关系:Ⅱ.并且还可以在继承一个类的同时实现多个接口。

37、接口与接口的关系:接口不能实现接口,只能是继承关系,可以单继承,也可以多继承。

38、总结:一样的是继承(类与类,接口与接口),不一样的是实现(类与接口)。接口的出现打破了单继承的局限性。

39、抽象类和接口的区别:Ⅰ.成员区别:ⅰ.抽象类:成员变量可以是变量,也可以是常量(final)。有构造方法。成员方法可以抽象,也可以非抽象。ⅱ.接口:成员变量只可以是常量。成员方法只可以是抽象方法。

40、抽象类和接口的区别:Ⅱ.关系区别:ⅰ.类与类:继承,单继承。ⅱ.类与接口:实现,单实现,多实现。ⅲ.接口与接口:继承,单继承,多继承。

41、抽象类和接口的区别:Ⅲ.设计理念区别:ⅰ.抽象类 被继承体现的是:“is a”的关系。抽象类中定义的是该继承体系的共性功能。ⅱ.接口 被实现体现的是:“like a”的关系。接口中定义的是该继承体系的扩展功能。

猜你喜欢

转载自blog.csdn.net/from_heat/article/details/83444479