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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-04-01 17:47  Ppotato3  阅读(27)  评论(0)    收藏  举报