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:
Example3:
比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"); } }
相关文章推荐
- eclipse自动补全设置
- Eclipse-设置格式化代码时不格式化注释
- ReentrantReadWriteLock
- java常用语法
- ACCPJAVAS1测试第三题
- 00-java实现设计模式-设计模式概述
- spring框架学习(七)—Spring实现IoC的多种方式
- 局部内部类和非静态成员内部类
- javaweb工作笔记
- RxJava 与 Retrofit 基本使用
- java练习--输出员工信息并计算员工的工资
- [Netbeans]为面板设置背景图片
- Java7新特性
- java大数相乘算法
- java Map 遍历速度最优解
- java练习--直角
- Spring Bean
- Java 序列化 和 反序列--by Vincent
- Java 序列化 和 反序列--by Vincent
- Java范型