多态、内部类、常用API part13

  • 多态的概述、优势、类型转换问题
  • 多态综合案例
  • 内部类
  • 匿名内部类
  • 常用API   Object   Objects
  • 常用API   Stringbuilder
  • 常用API   Math    System   BigDemical

一、多态的概述、优势、类型转换问题

1.面向对象三大特性之三:多态

多态的概述

同类型的对象,执行同一个行为,会表现出不同的行为特征

多态的形式

父类类型 对象名称 = new 子类构造器

接口类型 对象名称= new 实现类构造器

多态中成员的访问特点

方法调用:编译看左边,运行看右边

变量调用:编译看左边,运行也看左边(多态侧重行为多态)

多态的前提:有继承/实现关系,有父类引用指向子类对象,有方法重写

多态的优势

在多态形式下,右边对象可以实现解耦合,便于拓展和维护。(互相依赖没那么强)

定义方法时,使用父类作为参数,该方法就可以接受父类的一切子类对象,体现出多态的拓展性与便利。

多态会产生一个问题

多态下不能使用子类的独有功能

多态下引用数据类型的类型转换

自动类型转换:从子到父(子类对象赋值给父亲类型的变量指向)

强制类型转换:从父到子     子类  对象变量=(子类)父亲类型的变量

作用:可以解决多态下的劣势,可以实现调用子类的独有功能

注意:如果转型后的类型和对象的真实类型不是同一类型,转型后就会出现ClassCastException

强转之前使用instanceof判断当前对象的真实类型

多态的综合案例

二、内部类

1.内部类概述

一个类里面的类,外面的可以理解成宿主,里面的可以理解成寄生虫

内部类的使用场景、作用

事物内部,还有一个完整的结构需要进行描述,内部结构为外部事物提供服务。

方便访问外部类的成员

更好的封装性,protected/private修饰

2.内部类的分类:

  • 静态内部类

什么是静态内部类?

static修饰,特点和使用和普通类一样

静态内部类创建对象的格式:

静态内部类的拓展知识

静态内部类可以访问静态内部类的静态成员,不可以直接访问外部类的实例成员,可以new一个对象间接访问

 图片来源:https://blog.csdn.net/qq_44631615/article/details/108126134

  • 成员内部类

什么是成员内部类

无static修饰,属于外部类的对象,也称实例内部类。JDK16之前,成员内部类中不能定义静态成员,JDK16开始也可以定义静态成员了

 成员内部类创建对象的格式

 成员内部类的访问拓展

成员内部类可以访问外部类的静态成员,也可以直接访问外部类的实例成员

 图片来源:https://blog.csdn.net/qq_44631615/article/details/108126134

内部类:就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我。(所以内部类对象是以外部类对象存在为前提的)

静态内部类:就是我跟你没关系,自己可以完全独立存在,但是我就借你的壳用一下,来隐藏自己。

来源:https://www.cnblogs.com/47Gamer/p/13848028.html

注意:在成员内部类中访问所在外部类对象,格式:外部类名.this

  • 局部内部类

放在方法、代码块,构造器等执行体中

JDK16之后可以定义接口,抽象类,类里面可以放静态成员和实例成员

文件名:外部类$内部类.class

  • 匿名内部类

本质上是一个没有名字的局部类,定义在方法中,代码块中

方便创建子类对象,简化代码编写

原本抽象类不允许创建对象,是因为有抽象方法,创建对象后重写抽象方法

 匿名内部类是一个没有名字的内部类

匿名内部类写出来就会产生一个匿名内部类的对象

匿名内部类的对象类型相当于当前new的那个类型的子类类型

3.匿名内部类常见使用形式

方法回调

 匿名内部类可以直接作为方法的实际参数进行传输

4.匿名内部类真实使用场景演示

给按钮绑定点击事件

 GUI   图形界面化编程/桌面编程

做个按钮

绑定监听器

 

简化

开发中不是我们主动定义内部类,而是别人需要我们写或者我们可以写的时候才会使用

可以实现代码简化

三、常用API——Object\Objects

  • Object

        toString方法

        equals方法

  • Objects
  • StringBuilder
  • Math
  • System
  • BigDemical

Application Programming interface    应用程序编程接口

1.Object类

Object的作用

一个类要么默认Object的大类,要么间接继承了Object类,Object是java中的祖宗类

Object类的方法是一切子类可以直接使用的

toString类

父类toString存在的意义是为了被子类重写,以便返回对象的内容信息,而不是地址信息

 equals的作用

直接比较两个对象的地址是否相同可以用==代替equals

equals存在的意义是为了被子类重写,以便子类自己来定义比较规则

       String已经重写了equals

Objects类

Objects与Object是继承的关系,Objects是Object的子类。

增加了非空校验

 

 

2.StringBuilder

概述:是一个可变字符串类,可与i把它看成一个容器

作用:提高字符串操作效率,如拼接,修改

 

 StringBuilder比String的性能好

案例:打印整型数组内容

 

3.Math

执行数学运算,没有公开构造器,私有,不能创建对象,静态方法,可以直接用类名调用

生成0-6之间的整数

最后一项随机数包0不包1,之前学的random.nextInt是个类,可以指定区间,这里的是Math下面的一个方法

4.System类

 

上面Arrays.toString是把任意数组的内容返回为String类型

 5.bigDecimal  大数据类型

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值