2021-05-10

多态概述
多种状态,同一对象在不同情况下表现出不同的状态或行为
水在不同的温度下有不同的形态:
液态水
水蒸气
固态冰
Java 中实现多态的步骤
要有继承(或实现)关系
要有方法重写
父类引用指向子类对象.

多态关系中成员变量的使用
需求:子父类中定义了同名的成员变量,如何调用?
分析:
A :子父类中定义同名属性 name 并分别初始化值: String name;
B :在测试类中以多态的方式创建对象并打印 name 属性值: Animal
animal = new Dog();
C :在测试类中以普通方式创建对象并打印 name 属性值: Dog dog
= new Dog();
结论:
成员变量不能重写
成员变量的使用,取决于调用该变量的类型,成员变量不能重写
父类
package com.bigdata.demo2;
public class Parent {
String name = "父类中的name";
public void introduction() {
System.out.println("父类的自我介绍方法...");
}
}
子类
package com.bigdata.demo2;
public class Child extends Parent {
String name = "子类中的name";
@Override
public void introduction() {
System.out.println("子类 中的自我介绍方法...");
}
}
测试类
package com.bigdata.demo2;
public class Test {
public static void main(String[] args) {
// 父类引用 指向 子类对象
Parent parent = new Child();
// 通过父类引用 调用 成员变量, 取的是父类的变量值
System.out.println(parent.name);
// 通过父类引用调用成员方法, 具体调用的是什么方法要看右边 new 的是什么类型的对象
parent.introduction();
Child child = new Child();
System.out.println(child.name);
}
}

多态的好处和弊端
多态的好处
可维护性:
基于继承关系,只需要维护父类代码,提高了代码的复用性,大大降低了维护程序的工作量
为什么要学习多态:
从程序的模块化和复用性来解释
封装:让数据的操作模块化,提高代码复用性
继承:复用方法,从对象的行为这个层面,提高代码的复用性
多态:复用对象,程序运行时同一个对象表现出不同的行为
可扩展性:
把不同的子类对象都当作父类看待,屏蔽了不同子类对象间的差异,做出通用的代码,以适应不同的需
求,实现了向后兼容
多态的弊端
不能使用子类特有成员
解决办法:
向下转型(前提:必须准确知道该父类引用指向的子类类型)
向上转型(自动类型转换)
// 子类型转换成父类型 
Animal animal = new Dog();
向下转型(强制类型转换)
// 父类型转换成子类型
Dog dog = (Dog)animal;
注意事项
只能在继承层次内进行转换,否则可能造成异常( ClassCastException ) 将父类对象转换成子类之
前,使用 instanceof 进行检查
 
final 关键字
final 的概念
最终的、最后的
final 的作用
用于修饰类、方法和变量
修饰类:
该类不能被继承 String, System
修饰方法:
该方法不能被重写 不能与 abstract 共存
修饰变量:
最终变量,即常量,只能赋值一次
 
static 关键字
static 的作用
用于修饰类的成员 :
成员变量:类变量
成员方法:类方法
调用方式
类名 . 变量名 ;
类名 . 方法名 ( 参数 );
static 修饰成员变量
特点:
被本类所有对象共享
注意事项
随意修改静态变量的值是有风险的,为了降低风险,可以同时用 final 关键字修饰,即公有静态常量(注
意命名的变化)
 
静态方法:
静态方法中没有对象 this ,所以不能访问非静态成员
静态方法的使用场景
只需要访问静态成员 不需要访问对象状态,所需参数都由参数列表显示提供
 
接口
概念
接口技术用于描述类具有什么功能,但并不给出具体实现,类要遵从接口描述的统一规则进行定义,所
以,接口是对外提供的一组规则、标准。
接口的定义
定义接口使用关键字 interface
interface 接口名 {}
类和接口是实现关系,用 implements 表示
 
class 类名 implements 接口名 {} 
注意 :
接口不能实例化 , 通过多态的方式实例化子类对象
接口继承关系的特点
接口与接口之间的关系
继承关系,可以多继承,格式:
接口 extends 接口1,接口2,接口3
接口成员的特点
接口成员变量的特点
接口没有成员变量,只有公有的、静态的常量:
public static final 常量名 = 常量值;
接口成员方法的特点
JDK7 及以前,公有的、抽象方法:
public abstract 返回值类型 方法名();
JDK8 以后,可以有默认方法和静态方法:
 
public default 返回值类型 方法名() {} 
static 返回值类型 方法名() {}
JDK9 以后,可以有私有方法:
private 返回值类型 方法名() {}
接口构造方法的特点
接口不能够实例化,也没有需要初始化的成员,所以接口没有构造方法
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值