📦 归档笔记 — 原创建于 WizNote,仅作归档展示;观点以当年为准,非最新。

什么是向上转换 向下转换

创建时间2019-02-16最后修改2019-02-18原位置/程序员成长之旅/Java学习/笔记/字数625
目录:程序员成长之旅/Java学习/笔记

向上转换: 忽略父类没有/不相同的方法,若 子类有重写 (方法名,参数名/数量相同,方法内部不同的叫重写),则按照子类重写的方法来实施.

向下转换:在能实现向上转换所有功能的基础上,还能调用子类非重写的方法. 有风险. 向下转型后的对象和向上转型后的对象是同一个.

三段代码

public class Animal { private int amlSum; String aml; public Animal() { this.amlSum++; } public Animal(String aml) { this.aml = aml; this.amlSum++; } public void bark() { if (aml != null) { if (aml == "dog") { System.out.println("汪汪汪!!!"); }else{ System.out.println("不存在这个动物"); } }else{ System.out.println("动物叫"); } } }

25 25

1 public

class

Animal { 2

private

int

amlSum ; 3

String

aml ; 4 5

public

Animal () { 6

this . amlSum ++ ; 7 } 8 9

public

Animal ( String

aml ) { 10

this . aml

=

aml ; 11

this . amlSum ++ ; 12 } 13 14

public

void

bark () { 15

if ( aml

!=

null ) { 16

if ( aml

==

"dog" ) { 17

System . out . println ( "汪汪汪!!!" ); 18 } else { 19

System . out . println ( "不存在这个动物" ); 20 } 21 } else { 22

System . out . println ( "动物叫" ); 23 } 24 } 25 } public class Cat extends Animal{ //重写方法 public void bark(){//重写. System.out.println("喵喵喵~"); } public void bark(int x){//注意这里的参数发生了改变,所以属于Cat的独有方法. System.out.println(x); } public void touch(){//子类独有方法 System.out.println("喵!!喵喵喵喵!!"); } }

x 16

1 public

class

Cat

extends

Animal { 2

//重写方法 3

public

void

bark (){ //重写. 4

System . out . println ( "喵喵喵~" ); 5 } 6

7

8

public

void

bark ( int

x ){ //注意这里的参数发生了改变,所以属于Cat的独有方法. 9

System . out . println ( x ); 10 } 11 12 13

public

void

touch (){ //子类独有方法 14

System . out . println ( "喵!!喵喵喵喵!!" ); 15 } 16 } public class Test3{ public static void main(String[] args){ Animal test = new Cat();//创建向上转换 test.bark(); //此时直接调用dog方法的touch();或者 // dog方法的 bark(1);都会报错 Cat test2 = (Cat) test;//向下转换 创建一个新的对象 并且强制转换后引用先前创建好的对象 test2.touch(); test2.bark(1); } }

1 public

class

Test3 { 2

public

static

void

main ( String [] args ){ 3

Animal

test

=

new

Cat (); //创建向上转换 4

test . bark (); 5

//此时直接调用dog方法的touch();或者 6

// dog方法的 bark(1);都会报错 7

Cat

test2

= ( Cat ) test ; //向下转换 创建一个新的对象 并且强制转换后引用先前创建好的对象 8

test2 . touch (); 9

test2 . bark ( 1 ); 10 } 11 } 运行结果 喵喵喵~ 喵!!喵喵喵喵!! 1

另外也可以用这种方法访问子类独有方法 ((Cat) test).touch(); ((Cat) test).bark();

2

1 (( Cat ) test ). touch (); 2 (( Cat ) test ). bark ();