Java自学小白——面向对象进阶课程学习3
JAVA面向对象进阶课程学习3——多态、内部类、常用API
学校封校使用线上上课好久没有写。。。。在宿舍意志不坚定真的学不下去
对了说一下我是在网课黑马程序员自学的
现在就来边写边复习,欢迎各位大佬提出建议
一、多态
1.认识多态
- 什么是多态? 同类型的对象,调用同一个行为,表现出不同的行为特征
- 多态的常见形式
- 父类类型 对象名称 = new 子类构造器;
- 接口 对象名称 = new 实现类子类构造器;
- 创建一个父类对象(抽象类)
![]()
- 创建一个子类对象继承父类对象并重写父类中的抽象方法
![]()
- 多态中成员访问特点
- 方法调用:编译看左边,运行看右边

这里创建的是一个父类类型的对象,使用的是子类中的方法
运行结果: 
同样创建另一个对象:

运行结果:
-
- 变量调用:编译看左边,运行也看左边(多态侧重行为多态)
(讲实话我不太懂这个)
如果我不给子类变量赋值,自然出现的就是父类变量中的值,如果我给子类变量赋值,出现的就是子类变量的值,如下:
不赋值:

运行结果:
赋值:

运行结果:


不过似乎也能理解多态侧重在行为了
- 多态的前提
- 必须继承或实现关系
- 必须父类类型指向子类对象
- 存在方法重写
2.多态的优势
- 优势(不理解)
- 右边对象解耦合
- 父类类型变量作为方法的参数,可以接收一切子类对象
- 劣势
- 多态下无法调用子类独有功能
3.多态下引用数据类型的类型转换
- 自动类型转换(从子到父):子类对象赋值给父类类型的变量指向。如:Animal a = new Dog();
- 强制类型转换(从父到子):子类 对象变量 = (子类)父类类型的变量。如:Dog d = (Dog)a;
- 作用:可以解决多态下的劣势,可以实现调用子类独有的功能。
- 注意:

如:a instanceof Dog
4.多态案例:

(1).定义一个USB接口,里面存两个方法:接入和拔出

(2).写两个实现类代表鼠标和键盘,完成规范功能,并且写自己独有的功能
鼠标:

键盘:

(3)创建一个电脑对象,并提供安装方法

后面get、set方法这里省略了,并且少一个 }
(4)主方法test类:

(5)运行结果

总结:这里我认为比较难的地方是在电脑类中提供的USB安装方法,涉及到使用Instanceof判断并进行父类到子类的强制转换。然后再去调用本身子类中的独有的方法。

二、内部类
1.内部类概述
- 内部类就是一个定义在类里面的类

2.静态内部类



3.成员内部类


案例:

实现代码:


运行结果:

4.局部内部类

5.匿名内部类
- 本质上是一个没有名字的局部内部类,定义在方法中、代码块中等。
- 作用:方便创建子类对象,最终目的为了简化代码编写。
- 格式:

例:

- 特点:
- 是一个没有名字的内部类
- 匿名内部类写出来就会产生以一个匿名内部类的对象
- 匿名内部类的对象类型相当于是当前new的那个类型的子类类型
- 使用形式了解:

实例代码:

运行结果:
使用总结:
![]()

三、常用API
- 什么是API

1.Object类

- Object类常用方法:

- toString方法存在的意义:
- 希望输出对象的内容数据而不是对象的地址信息

- equals方法存在的意义:
![]()

2.Objects
- 概述:Objects是一个工具类,提供了一些方法去完成一些功能。


3.Stringbuilder
- 概述:Stringbuilder是一个可变的字符串类,可以把他看成一个对象容器。
- 作用:提高字符串的操作效率
![]()
-
![]()
![]()
![]()
-
![]()
- 案例:

实现代码:

运行结果:

- 练习代码:
1 /* 2 理解APIStringBuilder的使用 3 */ 4 public class StringBuilderDemo1 { 5 public static void main(String[] args) { 6 StringBuilder sb = new StringBuilder(); 7 sb.append("qwe"); 8 sb.append(1); 9 sb.append("唧唧复唧唧"); 10 System.out.println(sb); 11 12 // ""也可以先往里面存东西,不过一般不写 13 StringBuilder sb1 = new StringBuilder("123"); 14 15 //支持链式编程 16 sb1.append(123).append("sad").append("学校"); 17 System.out.println(sb1); 18 19 //反转 20 sb1.reverse().append("我爱你"); 21 System.out.println(sb1); 22 23 //长度 24 System.out.println(sb1.length()); 25 26 //StringBuilder最终还是要转回String类型使用 27 StringBuilder sb2 = new StringBuilder(); 28 sb2.append(123).append(5432); 29 String rs = sb2.toString(); //StringBuilder本身已经重写了toString方法 30 31 System.out.println(rs); 32 } 33 }
运行结果:

4.Math

5.System


6.BigDecimal














浙公网安备 33010602011771号