Java面向对象之多态解析、final关键字

一、多态

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);
	}
}

这样,无论有多少种哺乳动物,都可以直接继承哺乳动物类,哺乳动物类会直接调用陈述的语句。
1.2.1

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();  //调用鲸鱼对象特有的方法
	}
}

1.3.1

二、final关键字(不可变)

1、简单说明

  • 被final修饰的变量不可以被改变被称之为常量。
  • 被final修饰的方法不可以被重写(也是属于不可以被改变)
  • 被final修饰的类不可以被继承

2、当修改final修饰的内容时会出现错误
2.2.1

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();
	}
}

猜你喜欢

转载自blog.csdn.net/Viewinfinitely/article/details/119967497
今日推荐