您现在的位置是:首页 > 文章详情

Java 学习(11)--继承/final 关键字/多态/抽象类

日期:2018-06-08点击:410

1.继承  

(1)继承:子类可以自动拥有父类的非私有的成员变量和成员方法

(2)Java中如何表示继承呢?格式是什么呢?

A:用关键字 extends表示 

B:格式: class 子类名 extends 父类名 {} 

示例:

(3)继承的好处: 

A:提高了代码的复用性 B:提高了代码的维护性 C:让类与类产生了一个关系,是多态的前提

(4)继承的弊端:

A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的 类。 原则:低耦合,高内聚。

耦合:类与类的关系 内聚:自己完成某件事情的能力 

B:打破了封装性

(5)Java中继承的特点

A:Java中类只支持单继承(当多继承有重复的方法时,子类调用方法时无法判断是哪个方法) 

B:Java中可以多层(重)继承(继承体系) 

(6)继承的注意事项

A:子类不能继承父类的私有成员,只能继承父类所有的非私有成员 

B:子类不能继承父类的构造方法,但是可以通过 super 去访问 

C:不要为了部分功能而去继承 

(7)什么时候使用继承呢 ? 

A:继承体现的是: is a 的关系。 B:采用假设法

(8)Java继承中的成员关系 

A:成员变量 

a:子类的成员变量名称和父类中的成员变量名称不一样

b:子类的成员变量名称和父类中的成员变量名称一样, 子类的方法访问变量的查找顺序: 在子类方法的局部范围找,有就使用。 在子类的成员范围找,有就使用。 在父类的成员范围找,有就使用。 找不到,就报错。

示例a

 

示例b

  输出: ls

输出: ww

在子类方法的局部范围找,有就使用。

在子类的成员范围找,有就使用。 在父类的成员范围找,有就使用。 找不到,就报错。

B:构造方法 

a:子类的构造方法默认会去访问父类的无参构造方法 是为了子类访问父类数据的初始化 

b:父类中如果没有无参构造方法,怎么办 ? 子类通过 super去明确调用带参构造 子类通过 this 调用本身的其他构造, 但是一定会有一个去访问了 父类的构造 让父类提供无参构造

C:成员方法

a:子类的成员方法和父类中的成员方法名称不一样

b:子类的成员方法和父类中的成员方法名称一样,这个怎么访问呢 ? 

通过子类对象访问一个方法的查找顺序: 在子类中找,有就使用 在父类中找,有就使用 找不到,在父类的父类中找,有就使用;都没有就报错 

类和类之间的关系:

1.继承          

<strong>class Fu{} class Zi extends Fu{}</strong>

2.组合:一个类是另一个类的成员变量

<strong>class Cat{} class person{     Cat cat;     String name; }</strong>

3.关联:一个类是另一个类方法的参数

<strong>class Car{} class Driver{     public void drive (Car car){     } }</strong>

耦合:用来形容类和类之间的关系,耦合性越强说明类和类之间的关联越强

耦合性:继承 > 组合 > 关联

 

面试题:

1.Override 和 Overload 的区别 ?Overload 是否可以改变返回值类型 ?

答:方法重写:在父子类中,子类重写父类的方法,出现和父类中一模一样的方法声明的现象。

特点:1.如果方法名不同,调用对应的方法

          2.如果方法名相同,最终使用的是子类自己的

注意:1.父类中私有方法不能被重写

    2.子类重写父类方法时,访问权限要更高

    3.父类静态方法,子类也必须通过静态方法进行重写

方法重载:同一个类中,出现的方法名相同,参数列表不同的现象。方法重载能改变返回值类型,因为它和返回值类型无关。

2.this 和 super 的区别和各自的作用 ?

答 :this: 代 表 当 前 类 的 对 象 引 用

super: 代表父类存储空间的标识。 (可以理解为父类的引用, 通过这个东西可以访问父类的成员 )

数据初始化的面试题

A:一个类的初始化过程

1.成员变量的初始化默认初始化

2.显示初始化

3.构造方法初始化

B:子父类的构造执行过程:先进行父类初始化,然后进行子类初始化。

2.final 关键字 

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

(2)特点:

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

B:它修饰的方法,不能被重写(可以被继承)。

C:它修饰的变量,是一个常量(只能被赋值一次,不能再更改)

输出:ls

final 修饰后

不赋值会报错

输出:张三 6

final 修饰形参

600

报错

(3)面试相关:

A:局部变量

a:基本类型值不能发生改变       b: 引用类型地址值不能发生改变,但是对象的内容是可以改变的

B:初始化时机

a:只能初始化一次。b: 常见的给值定义的时候。 (推荐 )构造方法中。

3.多态 ( 掌握 )

(1)定义:同一个对象在不同时刻体现出来的不同状态(同一个变量调用同一个方法,执行不同的代码)。

输出:动物吃

输出:小猫吃鱼

多态示例:

输出:小狗吃肉

(2)多态的前提:

A:有继承或者实现关系。        

B:有方法重写。                     

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

(3)多态的分类:

a:具体类多态

<strong>class Fu {} class Zi extends Fu {} Fu f = new Zi(); </strong>

b: 抽象类多态

<strong>abstract class Fu {} class Zi extends Fu {} Fu f = new Zi(); </strong>

c:接口多态

<strong>interface Fu {} class Zi implements Fu {} Fu f = new Zi();</strong>

 (3)多态中的成员访问特点

A:成员变量:编译看左边,运行看左边(无多态)

B:构造方法:子类的构造都会默认访问父类构造

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

D:静态方法:编译看左边,运行看左边(无多态)

(4)多态的好处:

A:提高代码的维护性 (继承体现 ) B:提高代码的扩展性 (多态体现 )

(5)多态的弊端:

父不能使用子的特有功能。

现象:

子可以当作父使用,父不能当作子使用。

(6)多态中的转型

A:向上转型 :从子到父

B:向下转型:从父到子

 示例:

4.抽象类 ( 掌握 )

(1)把多个共性的东西提取到一个类中,这是继承的做法。

但是呢,这多个共性的东西,在有些时候,方法声明一样,但是方法体不一样。

也就是说,方法声明一样,但是每个具体的对象在具体实现的时候内容不一样。

所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体。

而一个没有具体的方法体的方法是抽象的方法

在一个类中如果有抽象方法,该类必须定义为抽象类。

(2)抽象类的特点

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

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

C:抽象类不能实例化,就是用来被继承的(强制继承类中的方法,这个抽象类实际上是定义规范的)     

D:抽象类的子类

a:是一个抽象类。 b: 是一个具体类。这个类必须重写抽象类中的所有抽象方法。

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

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

B:构造方法:有构造方法,不能实例化

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

(4)抽象类的练习

A:猫狗案例练习B:老师案例练习C:学生案例练习D:员工案例练习

(5)抽象类的几个小问题                                       

A:抽象类有构造方法,不能实例化,那么构造方法有什么用 ?

用于子类访问父类数据的初始化

B:一个类如果没有抽象方法 ,却定义为了抽象类,有什么用 ?

可以,为了限制类的实例化,只想让继承

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

a:final 冲 突 (final 类不能被继承,abstract抽象类只能被继承

b:private 冲 突 (私有的不能被继承)    

c:static 无意义 (static 本来就不能实例化,不能继承

 

参数传递

 

 

问题:猎人拿着猎枪去打猎物,拿着猎物去酒吧换酒

类:猎人  猎枪  猎物  酒吧 酒

输出:孟凡宝拿着AK47打了一个小兔子

思路

 

原文链接:https://yq.aliyun.com/articles/623979
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章