Java基础 多态 类(class) 造型(type)

概念

多态:由于参数不同而导致执行效果不同的现象

(多态变量:这个变量在运行时它所管理的那个对象的类型是会变化的)

  • Java的对象变量是多态的,它们能保存不止一种类型的对象
  • 它们可以保存的是声明类型的对象,或声明类型的子类的对象
  • 当把子类的对象赋给父类的变量的时候,就发生了向上造型

例子

interface Aniimal{

void shout();

}

class Cat implements Animal{

public void shout(){

System.out.println("喵喵");

}

}

class Dog implements Animal{

public void shout(){

System.out.println("汪汪");

}

}

class Ex11{

public static void main(String[] args){

Animal an1=new Cat();    //创建Cat对象,使用Animal类型的变量an1的应用

Animal an2=new Dog();    //创建Cat对象,使用Animal类型的变量an2的应用

animalShout(an1);    //调用animalShout()方法,将an1参数传入

animalShout(an2);    //调用animalShout()方法,将an2参数传入

}

//定义静态的animalShout()方法,接收一个Animal类型的参数

public static void animalShout(Animal an){

an.shout();

}

}

类(class)的本意是类型(type),所以,定义了一个新的类就是定义了一个新的类型

  • 类定义了类型
  • 子类定义了子类型
  • 子类的对象可被当作父类的对象来使用
  •    赋值给父类的变量
  •    传递给需要父类对象的函数
  •    放进存放父类对象的容器里

造型(cast):把一个类型对象赋给另外一个类型的变量的过程

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

注意:Java中不存在对象对对象的赋值!

父类的对象不能赋值给子类的变量!

 例子

//Vechicle是Car的父类

Vechicle v ;

Car c = new Car() ;

v = c ; //可以

c = v ; //编译错误!

可以用造型:c = ( Car )  v ;  (只有当v这个变量实际管理的是Car才行)

造型:用括号围起类型放在值的前面

对象本身并没有发生任何变化,所以不是"类型转换"

运行时有机制来检查这样的转化是否合理,ClassCastException

向上造型:拿一个子类的对象,当作父类的对象来用

向上造型是默认的,不需要运算符,向上造型总是安全的

String s="Hello"; 

s=" bye " ; // 这句话的意思是,原本s是管理"Hello"的,后来s去管理另外一个叫做"bye"的对象了

赋值运算符:让一个变量去管理另外一个对象

原文地址:https://www.cnblogs.com/chenyuan7/p/7895672.html