网站首页> 日志> Java系列学习(六)-多态
Java系列学习(六)-多态
编辑时间:2016-11-08 06:07:54 作者:李大宝 浏览量:751

1.final关键字 

 (1)最终的意思, 可以修饰类,方法,变量 

 (2)特点:

 A:它修饰的类,不能被继承 


91dcfb25-f4c1-4bcd-9787-c779068910c0


 B:它修饰的方法,不能被重写(覆盖) 


c09bef3c-8e4b-49a7-8c45-cf177fb5202d


 C:它修饰的变量,这个变量其实是一个常量 【扩展】

①字面量常量:“hello”,10 , true 

 ②自定义常量:final int x = 10; 


8591991d-7ed5-426e-bf6f-78e41f9a7b44


 (3)final面试相关: 

 A:final修饰局部变量的问题

 ①基本类型:基本类型的值不能发生改变


24e1bbef-b337-4bac-94d4-2a2143c9cb0c


 ②引用类型:引用类型的地址值不能改变,但是,该对象的堆内存的值是可以改变的 


d77b69de-c1bd-4fea-9545-5ab442590ba7


 B:初始化时间: 


 ①只能赋值一次 ②常见的赋值


1fc15cb5-2e8d-4f15-81fb-0acf306833bf

 2.多态 

 (1)同一个对象在不同的时刻 体现出来得到不同状态 

 (2)多态的前提: 

 A:有继承 或者 实现关系 

 B:有方法重写 

 C:有父类 或者 父接口引用指向子类对象 

 (3)多态的分类

 A:具体类多态

 B:抽象类多态

 C:接口多态 

 (4)多态中的成员访问

特点 A:成员变量 【编译看左边,运行看左边】


8d8b2409-af02-4bb1-955d-6c0d73bea4f4

 B:构造方法 【子类的构造都会默认访问父类构造】 创建子类对象的时候,会先访问父类的构造方法,对父类的数据进行初始化 


 C:成员方法 【编译看左边,运行看右边】

fdd76e12-1aef-4c0e-ac1a-98f09310bd45


 D:静态方法 【编译看左边,运行看左边】


ca2cb4f5-692d-412f-b05d-b8cac58bd40f

 E:为什么? 【因为成员方法有重写,静态方法与类相关】 


 (5)多态的好处 

 A:提高代码的维护性(继承体现) 

 B:提高代码的扩展性(多态体现)

 (6)多态的弊端: 父类不能使用子类的特有功能 表现:子可以当作父使用,父不能当作子使用 

 (7)多态中的转型 

 A:向上转型(从子到父) 【Person p = new Student()】 

 B:向下转型(从父到子) 【Student s = (Student)p】


 3.抽象类 

 (1)举个例子来理解抽象类 猫和狗都是动物,根据继承我们提取一个父类Animal,猫和狗都会叫,也就是它们的共性, 就可以在Animal类中定义,一个叫的方法。但是问题来了, 猫是喵喵叫,狗是汪汪叫,在父类的方法体,该如何写。 我们可以在Animal中只定义了一个叫的方法,但没有方法体,让子类来实现具体的方法。 这里这个没有方法体的方法就叫做抽象方法,这个类就叫做抽象类 


 (2)抽象类的特点 

 A:抽象类和抽象方法必须用关键字 abstract修饰

 B:抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类 

 C:抽象类不能实例化,要靠子类来实现 

 D:抽象类的子类

 ①是一个抽象类 

 ②是一个具体类,这个类必须重写抽象类的所有抽象方法 


 (3)抽象类的成员特点:

 A:成员变量 【有变量,有常量】 

 B:构造方法 【有构造方法】 

 C:成员方法 【有抽象,有非抽象】

 D:举例 


85a42b4a-128a-4157-918c-ab7e5087a337


 4)抽象类的几个小问题 


 A:抽象类与构造方法,不能实例化,那么构造方法有什么用? 用于子类访问父类数据的初始化

 B:一个类如果没有抽象方法,却定义为抽象类,有什么用 为了不让创建对象 

 C:abstract不能和哪些关键字共存 

 ①final 冲突 

 ②private 冲突 

 ③static 无意义 


 4.接口 

 (1)通过例子来理解接口 飞机和小鸟都会飞,但他们属于不同的东西,所以不能用抽象类, 但他们又都有 飞 这个功能,这个时候就可以考虑用接口了 

(2)接口的特点:

 A:接口用关键字interface修饰 

 B:类实现接口用implements修饰 

 C:接口不能实例化

 D:接口的实现类 

 ①是一个抽象类 

 ②是一个具体类


7fdd3bdf-56a1-4344-9b0e-bb1783959163


 (3)接口得到成员特点 

 A:成员变量 【只能是常量,默认修饰符:public static final】

 B:构造方法 【没有构造方法】 问:如果没有父类,那实现接口的子类,怎么初始化父类的成员


4a5da63e-9fff-4444-b2dc-32eab2c80ba3

 C:成员方法 【只能是抽象的,默认修饰符public abstract】 


d05d6c4d-f959-4881-a923-a74e425f9d6d


 (4)类与类,类与接口,接口与接口 

 A:类与类:继承关系 ,只能单继承,可以多层继承 

B:类与接口:实现关系,可以当实现,也可以多实现。并且还可以在继承一个类的同事实现多个接口 

 C:接口与接口:继承关系,可以单继承,也可以多继承


1a956729-825d-4d2d-949f-dd4c92e7e381

 (5)什么时候用抽象类,什么时候用接口 

 A:抽象类 被继承体现的是:xx is a XX 的关系。抽象类中定义的是该继承体系的共性功能。

 B:接口 被是实现体现的时候:xx like a XX 的关系。接口中定义的是该继承体系的扩展功能。



发表评论,请先 登录

袭人 

2018-08-16
00000000000000000