「JavaDay9面向对象」学习心得

JavaDay9面向对象

day9中,主要介绍5个新的问题:

(1)final关键字

(2)由继承铺垫而来的多态

(3)上下转型问题

(4)抽象类

(5)接口

1:final关键字可以干什么?有什么特点?

final关键字意味着最后、最终,用来对方法、成员变量、局部变量(基本数据类型、引用数据类型)、和类进行修饰,被final修饰后的对象,会有不同于以前的变化。

final关键字可以修饰的有三类:

(1)类:修饰后,无法继承

(2)成员变量:修饰后,成为一个常量

(3)成员方法:修饰后,无法被子类继承后重写

2:final关键字的面试题?

A:修饰局部变量

(1)修饰基本数据类型

修饰基本数据类型,无法继续修改该变量的值;

但是有两种初始化情况:

  • 饿汉式(给定引用就给定初始化值)
  • 懒汉式(给定引用后忽略初始化值,JVM默认初始,之后再给定值)

不管是哪一种情况,程序的编写者只能给final修饰的关键字赋值一次。

(2)修饰引用数据类型

引用数据类型的代表是代码执行过程中的一个具体的类对象,当被final修饰后,地址值固定不变,而其成员变量仍可以进行修改

案例演示:FinalDemo2.java

B:初始化时机

(1)只能被初始化一次,并且JVM的默认初始化不算初始化

(2)可以在成员变量初始化时直接赋值

(3)可以在类中代码块初始化

(4)可以在构造方法中初始化

3:多态是什么,前提是什么?

多态的出现,表达了这样的一种意思「同一个对象可以在不同时刻体现出不同的状态」,举一个例子,定义水为父类,那么冰块类、液态水类、水蒸气类、都具备水的一般属性,可以继承自水,当需要对这三个不同的类进行同一种相同操作的时候,只需要在方法中传入三者的父类即可,避免了针对同一种东西的不同类需要写多条方法语句的问题。

多态前提:

(1)具备继承关系;

(2)进行方法重写;

(3)父类引用指向子类对象;

4:多态中成员访问的特点?

成员变量:编译看左边父类,执行看左边父类

**成员方法:**编译看左边父类,执行结果为子类重写的方法,如果没有就使用来自父类的方法

静态方法:编译看左边父类,运行看左边方法

构造方法:先访问父类构造方法,再访问子类构造方法

5:多态的好处及弊端?如何解决多态的弊端?

多态的好处:

(1)多态让代码更容易维护

(2)多态提高了代码的扩展性

多态弊端:

(1)父类引用对象无法使用子类特有的方法

这时候,可以通过向下转型,把父类引用强制转换为子类引用,再调用子类的方法

6:什么是向上转型?什么是向下转型?

向上转型:

就是以「父类 f = new 子( )」这种形式出现的,由父类指向子类

向下转型:

「子 z = (子) f 」,把父类引用强制转换为了子类引用,同时这个过程是没有new对象的。

7:多态练习

案例演示:猫狗与工具类 「DuoTaiDemo2.java」

8:抽象类概述及其特点?

概述:

在「DuoTaiDemo2.java」中,定义了动物的两个具体方法eat、sleep,但是这是多余的,因为最终具体的类重写了这两个具体的方法;所以,这个类是没有必要定义成为一个具体类的,所以引入了抽象类

特点:

(1)抽象类是无法实例化的,但抽象类具有构造方法,作用是初始化子类

(2)抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类

(3)抽象类使用「abstract」关键字修饰

(4)抽象类的子类有两种

  • 不重写抽象方法,继续是一个抽象类

  • 重写所有抽象方法,是一个具体类

9:抽象类成员特点?

抽象类成员:

(1)成员变量:可以是常量、也可以是变量(可以被修改)

(2)构造方法:具有构造方法,能够被子类访问初始化

(3)成员方法:可以是具体方法、也可以是抽象方法,如果是抽象方法,那么方法不能有主体(不能有花括号)

抽象类实例化的方法也是存在的,就是通过多态中,父类引用指向子类对象 Animal a = new Cat( );

10:抽象类练习?

案例演示:「AbstractDemo.java」

11:抽象类的小问题

(1)一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?

可以,只有存在抽象方法的类,才必须定义成为抽象类

意义在于:这个类无法创建对象

(2)abstract不能和哪些关键字共存

  • private:被这个修饰的方法会导致子类无法重写
  • final:也会导致无法重写
  • static:通过「变量名.方法名」调用抽象方法时,没有意义

12:接口的概述及其特点?

(1)接口的产生:

继承解决的是类与类之间的共性问题,接口解决的是类与类的特性问题、

(2)特点:

  • 接口需要使用interface指定,使用implement实现
  • 接口不能进行一般的实例化,但是和抽象类一样,可以使用多态的方式进行实例化
  • 类与接口可以单实现,也可以多实现,并且在继承的基础上也可以实现
  • 接口的子类可以分为两种进行实现
    • 1 一个具体子类
    • 2 一个抽象类(没有意义)

13:接口的成员特点?

接口成员:

(1)成员变量:默认被 「public static final 」修饰;

(2)构造方法:没有构造方法;

(3)成员方法:默认被「public abstract」修饰,抽象方法;

14:接口的练习?

接口名+接口名+Impl这种格式是接口的实现类格式

案例演示:「InterFaceDemo2.java」

15:抽象类和接口的区别?

(1)设计理念不同

接口:沿用继承思想的「is a」

抽象类:突出类的独特性,「like a」

(2)建立的关系不同

接口:实现关系

抽象类:继承关系

(3)对成员方法的限制不同

接口:只能只抽象方法

抽象类:可以是抽象方法,也可以是具体方法,还可以在抽象类中不定义抽象方法,只定义类是抽象的

(4)对成员变量的限制不同

接口:成员变量是常量

抽象类:可以是常量和变量

(5)对构造方法的限制不同

接口:没有构造方法

抽象类:有构造方法,子类初始化时访问

(6)共性

都无法被正常实例化,但可以通过多态方式实例化

16:案例

  1. 猫狗案例,加入跳高的额外功能

案例演示:「InterFaceDemo.java」

  1. 老师和学生案例,加入抽烟的额外功能

案例演示:「InterFaceDemo4.java」

  1. 教练和运动员案例(学生分析然后讲解)

案例演示:「InterFaceDemo3.java」

总结

Day9学习了Java中的抽象类、接口类,还有多态,如果想让一个类无法实例化,也可以不用定义为抽象类,直接私有它的构造方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值