Java基础:final与多态性

final()

在JAVA中final被称为终接器,可以使用final来定义类方法及常量
1.如果使用final定义的类不能有子类
2.使用final定义的方法不能子类覆写
错误代码演示

final class A{ //A类不允许有子类,此时会错误
	public final void fun(){
		
	}
}
class B extends A{
	public void fun(){}//会出现错误
}
public class TestDemo{
	public static void main(String args[]){
		
	}
}

3.使用final定义的变量就变为常量,必须在声明时候赋值且不许修改
通常用public static final 来定义全局常量
常量的标识符全部使用大写表示

多态性

核心:
1.方法的多态性:
方法重载上同一个方法名称可以根据参数的类型及个数的不同调用不同的方法体
方法覆写,同一个父类的方法,可能根据实例化的子类不同有不同的实现
2.对象的多态性(前提:方法的覆写)
对象的向上转型:父类 父类对象 = 子类实例;可以实现接收参数的统一(见最后一个代码例子)
对象的向下转型:子类 子类对象 = (子类)父类实例;,可实现子类方法扩充的调用(但很少操作,存在安全隐患,所以开发中不要用向下转型)
例子
int(下级) + long(上级) = long
例子

 class A{
	public void print(){
		System.out.println("【A】public void print(){}");
	}
}
final class B extends A{
	public void print(){
		System.out.println("【B】public void print(){}");
	}
}

public class TestDemo{
	public static void main(String args[]){
		B b = new B();
		b.print();
	}
}

在这里插入图片描述
如果向下转型会有隐患,那么如何转型才靠普?应该先进行判断,而后再转型:
instanceof
子类对象 instanceof类,返回的是布尔
例子

class A{
	public void print(){
		System.out.println("【A】public void print(){}");
	}
}
final class B extends A{
	public void print(){
		System.out.println("【B】public void print(){}");
	}
}

public class TestDemo{
	public static void main(String args[]){
		A a = new B();
		System.out.println(a instanceof A);
		System.out.println(a instanceof B);
	}
}

表明可以AB转换
在这里插入图片描述
instanceof可以避免ClassCastException问题:如下

 class A{
	public void print(){
		System.out.println("【A】public void print(){}");
	}
}
final class B extends A{
	public void print(){
		System.out.println("【B】public void print(){}");
	}
}

public class TestDemo{
	public static void main(String args[]){
		A a = new B();
		System.out.println(a instanceof A);
		System.out.println(a instanceof B);
		if (a instanceof B)
		{
			B b = (B) a;
			b.print();
		}
	}
}

在这里插入图片描述

思考:多态性的意义

要求定义一个方法,可以接收Person类的所有子类实例并调用Person类的方法:

class Person{
	public void takeoff(){
		System.out.println("脱衣服");
	}
}
class Student extends Person{
	public void takeoff(){
		System.out.println("一件件脱衣服");
	}
}
class Worker extends Person{
	public void takeoff(){
		System.out.println("直接卷了");
	}
}
public class TestDemo{
	public static void main(String args[]){
		in(new Student());
		in(new Worker());
	}
	public static void in(Person per){
		per.takeoff();//所有的人不管什么人都按照统一方式碱性
	}
}

在这里插入图片描述
通过以上的分析;对象的向上转型有一个最核心的用处:操作参数统一

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值