您的位置:首页 > 编程语言 > Java开发

java多态使用、向上转型、向下转型

2016-09-28 17:19 441 查看
父类的引用指向子类对象 。
比father类,son类继承father类,
father f = new son();//向上转型
son s = (son) f;//向下转型
 父类的引用f指向子类对象sun()的就属于多态,
多态性是允许你将父对象设置成为一个或更多的他的子对象。
多态可以节省开发和维护时间,避免了大量代码重复的使用,因为不需要再子类中重复定义执行相同功能的方法。
如果子类有覆写父类的方法,实际上调用的是子类的方法,重写是Java实现多态技术的重要方法。
Example1:
</pre><div style="text-align: justify;"></div></p><pre name="code" class="java">public class father {
public static void main(String agrs[]){
father f = new father();
f.draw(new son1());//向上转型 多态的使用
f.draw(new son2());
}
public void draw(father f){ //方法中使用父类作为参数类型
//具体实现
}
}

class son1 extends father{
son1(){
System.out.println("son1子类");
}
}

class son2 extends father{
son2(){
System.out.println("son2子类");
}
}

Example2:

/**
* Created by cuboo on 2016/10/12.
*/
public class fathers {
public static  void main(String agrs[]){
//向上转型 调用子类相同方法(重写、方法一样) 多态的使用
father f = new son1();
f.draw();

//向下转型 调用父类及子类所有方法
son1 s1 = (son1) f;
s1.draw();
s1.draw1();
s1.s();

//向上转型 调用子类相同方法(重写、方法一样) 多态的使用
father f1 = new son2();
f1.draw();

//向下转型 调用父类及子类所有方法
son2 s2 = (son2) f1;
s2.draw();
s2.draw2();
s2.s();

}

}

class father {
public void draw(){  //方法中使用父类作为参数类型
System.out.println("father draw");
}
void s(){
System.out.println("father s");
}
}

class son1 extends father{
son1(){
System.out.println("son1子类");
}

//与复类方法名相同
public void draw() {
System.out.println("son1 draw");
}

public void draw1() {
System.out.println("son1 draw1");
}
}

class son2 extends father{
son2(){
System.out.println("son2子类");
}

//重写父类方法
@Override
public void draw() {
System.out.println("son2 draw");
}
public void draw2() {
System.out.println("son2 draw2");
}
}

Example3:

/**
* Created by cuboo on 2016/10/12.
*/
public class fathers {
public static  void main(String agrs[]){
//向上转型 调用子类相同方法(重写、方法一样) 多态的使用
father f = new son1();
f.draw();

//向下转型 调用父类及子类所有方法
son1 s1 = (son1) f;
s1.draw();

//向上转型 调用子子类相同方法(重写、方法名一样) 多态的使用
f = new gson();
f.draw();

//向上转型 调用子类相同方法(重写、方法一样) 多态的使用
father f1 = new son2();
f1.draw();
//向下转型 调用父类及子类所有方法
son2 s2 = (son2) f1;
s2.draw();

}

}

interface father {
public void draw();
}

class son1 implements father{
@Override
public void draw() {
//具体实现
System.out.println("son1的draw");
}
}

class son2 implements father{
@Override
public void draw() {
//具体实现
System.out.println("son2的draw");
}
}

class gson extends son1{
@Override
public void draw() {
System.out.println("gson的draw");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: