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

简介: 1.继承  (1)继承:子类可以自动拥有父类的非私有的成员变量和成员方法(2)Java中如何表示继承呢?格式是什么呢?A:用关键字 extends表示 B:格式: class 子类名 extends 父类名 {} 示例:(3)继承的好处: A:提高了代码的复用性 B:提高了代码的维护性 C:让类与类产生了一个关系,是多态的前提(4)继承的弊端:A:让类的耦合性增强。

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打了一个小兔子

思路

 

目录
相关文章
|
28天前
|
存储 缓存 安全
除了变量,final还能修饰哪些Java元素
在Java中,final关键字不仅可以修饰变量,还可以用于修饰类、方法和参数。修饰类时,该类不能被继承;修饰方法时,方法不能被重写;修饰参数时,参数在方法体内不能被修改。
25 2
|
29天前
|
JavaScript 前端开发 Java
java中的this关键字
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。自学前端2年半,正向全栈进发。若我的文章对你有帮助,欢迎关注,持续更新中!🎉🎉🎉
50 9
|
29天前
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
51 8
|
1月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
1月前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
46 4
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
28天前
|
Java
final 在 java 中有什么作用
在 Java 中,`final` 关键字用于限制变量、方法和类的修改或继承。对变量使用 `final` 可使其成为常量;对方法使用 `final` 禁止其被重写;对类使用 `final` 禁止其被继承。
33 0
|
2月前
|
Java 程序员 编译器
|
7月前
|
存储 安全 Java
24、使用 Java 官方教程学习:① 类变量和类方法详解;② 深入介绍 main() 方法
24、使用 Java 官方教程学习:① 类变量和类方法详解;② 深入介绍 main() 方法
93 1
|
7月前
|
存储 Java
【JAVA学习之路 | 进阶篇】Map接口及其实现类及常用方法
【JAVA学习之路 | 进阶篇】Map接口及其实现类及常用方法
下一篇
DataWorks