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

思路

 

目录
相关文章
|
5月前
|
Java Go 开发工具
【Java】(9)抽象类、接口、内部的运用与作用分析,枚举类型的使用
抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接 口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要是用于被其子类调用。抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类abstract static不能同时修饰一个方法。
278 1
|
9月前
|
安全 Java API
Java 抽象类与接口在 Java17 + 开发中的现代应用实践解析
《Java抽象类与接口核心技术解析》 摘要:本文全面剖析Java抽象类与接口的核心概念与技术差异。抽象类通过模板设计实现代码复用,支持具体方法与状态管理;接口则定义行为规范,实现多态支持。文章详细对比了两者在实例化、方法实现、继承机制等方面的区别,并提供了模板方法模式(抽象类)和策略模式(接口)的典型应用示例。特别指出Java8+新特性为接口带来的灵活性提升,包括默认方法和静态方法。最后给出最佳实践建议:优先使用接口定义行为规范,通过抽象类实现代码复用,合理组合两者构建灵活架构。
286 2
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
1207 60
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
684 15
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
Java 编译器
Java——类与对象(继承和多态)
本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
393 7
Java——类与对象(继承和多态)
|
Java
java继承和多态详解
java继承和多态详解
221 5