引用数据类型转型及多态的体现

引用数据类型转型分为两种,一种是向上转型,另一种是向下转型。

一、向上转型(父类引用执行子类对象)

例:
class Person{
	public String name;
	public int age;
}

class Student extends Person{
	public String class;
}

class Text{
	public static void main(String[] args){
		Person s = new Student();//父类引用指向子类对象,s对象是Student类的实例,被Person类引用
	}
}

注意:

  1. 这是多态的一种体现(多态:一种事物的多种表现形式)。
  2. 向上转型中的两个类必须是继承关系。
  3. 执行顺序:父类静态块–>子类静态块–>父类构造块–>父类构造器–>子类构造块–>子类构造器
  4. 若两个类中有相同的方法,那么程序执行时会调用子类中重写的方法,且对子类新增方法不可见
  5. 若两个类中有相同的变量,那么程序执行时会调用父类的变量。
例:
class Person{
  public String name="教师";
  public static void work(){
  	System.out.print("正在去授课!");
  }
}

class Student extends Person{
  public String name=“学生”;
  public static void work(){
  	System.out.print("正在去学习!");
  }
  public static void eat(){
  	System.out.print("正在去食堂!");
  }
}

class Text{
  public static void main(String[] args){
  	Person s = new Student();//父类引用指向子类对象
  	System.out.print(s.name);//输出的是父类的变量 教师
  	System.out.print(s.work());//输出的是子类的方法   正在去学习!
  	System.out.print(s.eat());//程序报错  eat()是子类中新增的方法,父类对该方法不可见。
  }
}

二、向下转型(父类转向子类,强制转换)

例:
class Person{
	public String name;
	public int age;
}

class Student extends Person{
	public String class;
}

class Text{
	public static void main(String[] args){
		Student s2 = (Student)new Person();//向下转型
	}
}

instanceof

若父类被不止一个子类继承,那么会在向下转型时会发生转型异常(ClassCastException),需要用 instanceof 判断一个类的对象是否为一个类的实例,如果是返回true,否则返回false。
引用数据类型 instanceof 类

例:
class Person{
	public String name;
}

class Student extends Person{
	public String class;
}

class Daughter extends Person{
	public String class;
}
class Text{
	public static void main(String[] args){
		Person s1 = new Student();//向上转型 
		if(s instanceof Student)//判断s对象是否为Student类的实例,此处返回true
			Student s2 = (Student)s;//向下转型,转型成功
		else if(s instanceof Daughter)//判断s对象是否为Daughter类的实例,此处返回false
			Daughter s3 = (Daughter)s;//向下转型,如果此句被执行,那么编译不会出错但是执行会发生转型异常
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值