多态

概念:

声明父类变量来引用子类对象,或者声明接口变量来引用实现类对象

使用多态前提:

必须有继承或者实现条件下才能使用多态

 

语法规则:

父类的引用(变量)可以指向子类的对象

可以将子类的对象赋值给父类类型的变量

多态优点:

  1. 多态作用在形参上,可以接受更多的数据类型
  2. 多态作用在返回值类型上,可以返回更多的数据类型

多态特点:

  1. 多态情况下,子类和父类存在同名的成员属(静态和非静态)性时,访问的是父类的成员属性
  2. 多态情况下,子类和父类存在同名的非静态成员函数时,访问的是子类的非静态函数
  3. 多态情况下,子类和父类存在同名的静态成员函数时,访问的是父类的静态函数
  4. 多态情况下,接口和实现类中存在函数,调用时访问的是实现类的函数

多态的调用:

1、向上转型

Teacher teacher=new  Teacher();

//new 出来的称为对象的类型

//声明出来的 称之引用的类型

一般的情况: 对象类型和引用的类型是同一种数据类型

向上转型是指: 子类对象  赋予 父类的引用,向上转型是非常的安全

Person person=new Teacher();

2.向下转型

向下转型: 把父类引用 赋予子类引用

    Student student=new Person();//绝对错误

这是错误是Type mismatch: cannot convert from Person to Student 类型不匹配:无法从个人转换为学生

    Student student2= (Student) person ;
        student2.home();//绝对错误

这是错误是Teacher cannot be cast to duotai.Student    老师不能投给多台,学生

Person person1=new Student();
Student student1= (Student) person1 ;////向下转型不安全,能否转型成功取决于父类引用中保存的是哪个子类对象
student1.home();

必须判断父类引用中到底保存的是哪个类型的对象才可以向下转型,否则报错

instanceof

nstanceof 如果是,返回 ture 否则是false

写法格式:

  1. Person person2 =new Teacher();
  2.         if(person2 instanceof Teacher ){
  3.             Teacher teacher1 = (Teacher)person2;
  4.             teacher1.home();
  5.             
  6.         } 

代码如下:

public class Person {
	public String name;
	public String job;
	public int age;
	public char sex;
	
	public void present() {
		System.out.println("人高高兴兴地度过每一天");
	}
	public void work() {
		System.out.println("对工作认真地负责");
	}
}


public class Teacher extends Person {

	public void shool() {
			super.name="王五";
		job="师范大学";
		System.out.println(name+"在"+job+"教Java课");
	}
	public void home() {
		super.name="王五";
		System.out.println(name+"的家家庭充满知识的气氛");
	}
}

public class Student extends Person{
	String name="小花";
	protected void operating() {
		age=17;
		System.out.println(name+"在"+age+"上高三");
	}
	public void home() {
		
		System.out.println(name+"在家庭看书");
	}

}

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//	向上转型
		Teacher teacher=new  Teacher();
		teacher.shool();
		//向下转型 把父类引用 赋予子类引用
		// Type mismatch: cannot convert from Person to Student
		Student student=new Student() ;
		
		//Dog dog = (Dog)animal;  //向下转型
		student.operating();
		Person person=new Teacher();
		person.work();
		
		Person person1=new Student();
		Student student1= (Student) person1 ;
		student1.home();
		
		//instanceof 如果是,返回 ture 否则是false
		Person person2 =new Teacher();
		if(person2 instanceof Teacher ){
			Teacher teacher1 = (Teacher)person2;
			teacher1.home();
			
		} 

	}
	
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值