一、多态
1、简单说明
(1)同一个对象拥有多个状态,可以把不同的类型进行统一,让程序具有超强的可扩展性,简化了调用时的操作。
(2)“父类=子类”向上赋值:因为子类可以当做父类看,所以可以把子类赋值给父类。
(3)通过父类引用只能访问子类对象从父类继承过来的成员,通过父类引用不能访问子类对象所特有(私有)的成员。
2、测试练习
//定义鲸鱼类:继承哺乳动物类
class Whale extends Mammal{
//鲸鱼类的公有方法
public void speeking(){
System.out.println("我是生活在海里的鲸鱼。");
}
}
//定义蝙蝠类:继承哺乳动物类
class Bat extends Mammal{
//蝙蝠类的公有方法
public void speeking(){
System.out.println("我是蝙蝠,是能飞的老鼠。");
}
}
//定义海豚类:继承哺乳动物类
class Dolphin extends Mammal{
//海豚类的公有方法
public void speeking(){
System.out.println("我是白鳍豚,别人都叫我水中大熊猫。");
}
}
//定义哺乳动物类(连接多态)
class Mammal{
//哺乳动物类的公有方法
public void speeking(){
System.out.println("动物正在说话……");
}
}
//定义人类
class Person{
//定义人类的行为,接收到的所有哺乳动物都是ma
public void act(Mammal ma){
ma.speeking(); //并且每次都执行该哺乳动物的陈述
}
}
//定义主方法的类
public class Test05{
public static void main(String[] args){
Mammal ma1 = new Whale(); //创建一只鲸鱼对象
Mammal ma2 = new Bat(); //创建一只蝙蝠对象
Mammal ma3 = new Dolphin(); //创建一只海豚对象
//创建人类对象,执行动作
Person P = new Person();
P.act(ma1);
P.act(ma2);
P.act(ma3);
}
}
这样,无论有多少种哺乳动物,都可以直接继承哺乳动物类,哺乳动物类会直接调用陈述的语句。
3、向上赋值会屏蔽子类中特有的方法,此时需要向下转型
//定义鲸鱼类:继承哺乳动物类
class Whale extends Mammal{
//鲸鱼类的公有方法
public void speeking(){
System.out.println("我是生活在海里的鲸鱼。");
}
//定义鲸鱼类中特有的方法
public void ejecting(){
System.out.println("一只蓝鲸正在向海面上空喷出巨大的水柱!");
}
}
//定义蝙蝠类:继承哺乳动物类
class Bat extends Mammal{
//蝙蝠类的公有方法
public void speeking(){
System.out.println("我是蝙蝠,是能飞的老鼠。");
}
}
//定义海豚类:继承哺乳动物类
class Dolphin extends Mammal{
//海豚类的公有方法
public void speeking(){
System.out.println("我是白鳍豚,别人都叫我水中大熊猫。");
}
}
//定义哺乳动物类(连接多态)
class Mammal{
//哺乳动物类的公有方法
public void speeking(){
System.out.println("动物正在说话……");
}
}
//定义人类
class Person{
//定义人类的行为,接收到的所有哺乳动物都是ma
public void act(Mammal ma){
ma.speeking(); //并且每次都执行该哺乳动物的陈述
}
}
//定义主方法的类
public class Test05{
public static void main(String[] args){
Mammal ma0 = new Mammal(); //创建一只哺乳对象(提示语句)
Mammal ma1 = new Whale(); //创建一只鲸鱼对象
Mammal ma2 = new Bat(); //创建一只蝙蝠对象
Mammal ma3 = new Dolphin(); //创建一只海豚对象
//创建人类对象,执行动作
Person P = new Person();
P.act(ma0); //调用哺乳类的speeking(提示语句)
P.act(ma1); //调用各个哺乳动物的speeking动作
P.act(ma2);
P.act(ma3);
System.out.println("------------------------------------------");
//向下转型(强制类型转换)鲸鱼对象ma1
Whale wh = (Whale)ma1;
wh.ejecting(); //调用鲸鱼对象特有的方法
}
}
二、final关键字(不可变)
1、简单说明
- 被final修饰的变量不可以被改变被称之为常量。
- 被final修饰的方法不可以被重写(也是属于不可以被改变)
- 被final修饰的类不可以被继承
2、当修改final修饰的内容时会出现错误
3、测试练习
public class Test05{
//final常量
final int height = 180;
//final常方法
public final void speeking(){
System.out.println("我是不会变心的!!!");
}
//主方法
public static void main(String[] args){
//重新定义变量可以
final int height = 99;
Test05 te = new Test05(); //调用本类中的方法
//te.height = 99; //修改对象值不可以
te.speeking();
}
}