javaSE基础知识第三章(多态、内部类、代码块)

三. 多态

1. 多态

  • 多态: 指同一种事物的多种体现形式.

多态的前提

  1. 要有继承或者实现关系(子父类)
  2. 要有方法的重写
  3. 要有父类引用指向子类对象

2. 多态的访问特点

  • 属性(成员变量)
    • 成员变量都用private修饰, 提供了get/set方法
    • 编译看左边(父类), 运行也看左边(父类)
  • 行为(成员方法)
    • 编译看左边(父类), 运行看右边(子类)

3. 多态的好处(使用)

  • 多态的好处主要体现在: 参数的传递
  • 形参是父类类型, 可以传入所有子类对象

4. 多态的弊端

  • 当写出了多态(父类引用指向子类对象), 父类的引用不能直接调用子类特有的属性和行为.

向上转型: 多态本身就是子类类型默认转换到父类类型的过程.

Animal a = new Dog();
// 隐式类型转换(自动类型转换)
double a = 10; // int类型的10, 自动转换成double类型

向下转型: 父类类型转换到子类类型的过程, 这个过程必须是强制的

Dog d = (Dog)a;
// ========================
double a = 10;
// 不想用double类型的a, 我想用int类型
// 强制类型转换(显式类型转换)
int i = (int)a;

向上转型是默认的, 只要有多态, 就有向上转型

什么时候需要向下转型?

​ 父类引用需要调用子类特有的属性和行为的时候, 需要向下转型;

向下转型的时候可能遇到的问题

  • ClassCastException : 类型转换异常
  • 解决方案: instanceof
A instanceof B : 
	得到一个boolean类型的结果
    结果代表了A是否是B的类型

四. 内部类

1. 成员内部类

  • 位置: 类中方法外
  • 格式
class 类A {	// 外部类
    class 类B {	// 内部类
        
    }
}
  • 场景:

    • 汽车类, 需要内部类(发动机)
    • 人类, 需要内部类(心脏)
  • 访问特点:

    • 1.内部类可以直接访问外部类中的成员,包括私有成员
    • 2.外部类要访问内部类中的成员,必须要建立内部类的对象

如果内部类中定义了静态成员,该内部类也必须是静态的

2. 匿名内部类

前提

  • 存在一个类或者是接口(类可以是抽象类也可以是非抽象类)

格式

new 类名() {};

new 接口名() {};

本质

new 类名() {};
代表继承了该类的子类对象.
    
new 接口名() {};
代表实现了该接口的实现类对象.

五. 代码块

  • 普通代码块

    • 位置: 方法中
    • 格式: {}
    • 作用:划分作用域(限制局部变量的作用范围,提前释放内存)
  • 构造代码块

    • 位置: 类中方法外
    • 格式: {}
    • 执行方式: 每次创建对象都会执行构造代码块, 优先于构造方法执行
    • 作用:对对象进行初始化
  • 静态代码块

    • 位置: 类中方法外
    • 格式: static { }
    • 执行方式: 随着类的加载而执行(只执行一次), 优先于构造方法(构造代码块)执行
    • 作用: 类被加载到内存时执行,且只执行一次,可用于项目中仅需执行一次的操作
      ​静态代码块和静态成员变量(类变量), 谁在前, 谁先执行.
  • 同步代码块

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值