`
mxin362642945
  • 浏览: 8333 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JAVA--多态及向上、向下转型问题

    博客分类:
  • JAVA
阅读更多
代码解释多态 转型问题:
public class Polymorphic {

	public static void main(String [] args){
		//多态-----动态绑定(后期绑定)
		//程序运行时根据具体参数地址找到内存对象 从而能够正确执行对应的方法。
		ShapeController objShapeController = new ShapeController();
		Shape objShape = new Circle();
		objShapeController.doActive(objShape); // 结果:Circle.draw  Circle.move
		objShape = new Square();
		objShapeController.doActive(objShape); // 结果:Square.draw  Square.move
		
		//向上转型:安全的 但可能会丢失子类数据
		Shape objShape11 = new Circle();//向上转型
		objShape11.draw();//结果:Circle.draw .  objShape11引用指向 new Circle()的地址。
		//objShape11.ping();   //此方法掉不通。----方法丢失
		
		//向下转型:不安全 必须知道确切的类型  并且执行过程中是程序效率降低(执行类型检查)
		Shape objShape22 = new Circle();//向上转型
		((Circle)objShape22).ping();//向下转型。 必须知道具体的子类类型  执行强制转换
		objShape22 = new Square();
		//((Circle)objShape22).ping();//结果:ClassCastException
		//((Circle)objShape22).draw();//结果:ClassCastException
	}
}

class ShapeController{
	
	void doActive(Shape objShape){
		objShape.draw();
		objShape.move();
	}
}

class Shape{
	
	void draw (){};
	
	void move (){};
} 

class Circle extends Shape{

	@Override
	void draw() {
		System.out.println("Circle.draw");
	}

	@Override
	void move() {
		System.out.println("Circle.move");
	}
	
	void ping(){
		System.out.println("Circle.ping");
	}
}

class Square extends Shape{

	@Override
	void draw() {
		System.out.println("Square.draw");
	}

	@Override
	void move() {
		System.out.println("Square.move");
	}
	
	void tt(){
		System.out.println("Square.tt");
	}
}
 
分享到:
评论

相关推荐

    10-JAVA-多态

    JAVA多态思维导图,便捷整理思路,多态的好处、多态的语法格式、多态中的两种类型转换:向上转型、向下转型

    JAVA面向对象基础测试题-继承-封装-多态等测试题.docx

    但向下转型需要确保子类对象确实是该子类的实例。因此,在 `<插入代码>` 处,只有 `p0 = p1;` 和 `p0 = p3;` 是合法的,因为 `p1` 和 `p3` 都是 `ClassB` 类型的对象,可以向上转型为 `ClassA` 类型。因此,正确答案...

    【IT十八掌徐培成】Java基础第06天-03.多态-类多态-接口多态-同名属性问题.zip

    若要访问子类中同名的属性,需要将对象强制转换为子类类型,然后通过子类引用进行访问,这被称为向下转型。 在实际编程中,应尽量避免在父子类之间定义同名属性,因为这可能导致混淆和难以维护的代码。如果确实需要...

    教学视频-继承&多态

    3. 类型转换:多态还体现在对象的类型转换上,向上转型(父类引用指向子类对象)是自动的,而向下转型(子类引用指向父类对象)需要显式进行,并且需要注意可能抛出`ClassCastException`。 在实际应用中,继承和...

    Java-多态--学习笔记.docx

    2. **向下转型**:将父类引用强制转换为子类类型,这是不安全的,因为如果父类引用实际上指向的是另一个子类的对象,那么强制转换会导致`ClassCastException`。例如: ```java Animal a = new Dog(); Cat c = ...

    java学习资料-Java继承和多态

    而向下转型(Downcasting)需要显式进行,需要注意的是,只有真正的子类对象才能安全地向下转型。 ### 封装 **1. 封装的原理** 封装是面向对象编程的三大特性之一,它保护了类的数据不受外界非法访问。通过封装,...

    Java零基础-多态.md

    - 向下转型(如将`Animal`转为`Cat`)需要显式转换,并且需要确保类型安全。 3. **动态绑定** - 在运行时确定调用哪个方法的过程称为动态绑定。 - 对于非静态方法和非final方法,Java会根据对象的实际类型来...

    Java 多态中的类型转换

    本篇将深入探讨Java多态中的类型转换,包括向上转型(Upcasting)和向下转型(Downcasting),以及相关的注意事项。 1. **向上转型(Upcasting)** 向上转型是指将子类的对象引用赋值给父类的引用。在Java中,这是...

    java多态的总结

    理解多态的关键在于“向上转型”和“向下转型”。向上转型是指将子类对象赋值给父类引用,这是自动进行的,无须额外操作。例如: ```java Animal animal = new Cat(); // 向上转型,猫是动物的一种 animal.speak(); ...

    多态的练习案例

    6. **向上转型与向下转型**:多态中的向上转型是指将子类对象赋值给父类引用,允许我们使用父类的所有非私有成员。向下转型则是将父类引用转换为子类引用,以访问子类特有的成员。需要注意的是,不正确的向下转型会...

    java中对象转型多态抽象类接口笔记.doc

    - **定义**:将父类的引用转换为子类的引用,称为向下转型。 - **示例**: ```java Student s = (Student) p; ``` - **特点**: - 需要显式地使用类型转换操作符。 - 如果父类引用实际指向的是子类对象,则转换...

    Java 多态应用,掌握多态

    4. **向上转型(Upcasting)与向下转型(Downcasting)**:向上转型是指将子类对象赋值给父类引用,这是隐式的,编译器允许这么做,因为子类是父类的特例。而向下转型则是将父类引用转换为子类对象,需要显式进行,...

    java 多态 经典讲解

    ### Java多态经典讲解 #### 一、理解Java多态 多态,作为面向对象编程的三大特性之一,是继抽象和继承之后的关键概念。它允许我们以统一的接口处理不同类型的对象,增强了代码的灵活性和可扩展性。在Java中,多态...

    学习Java之如何正确地向上转型与向下转型.rar

    向上转型是多态的基础,而向下转型则是在确保安全的情况下利用多态的进一步扩展。在设计和编写程序时,合理地运用这两种转型方式可以提高代码的可扩展性和可维护性。 **总结** 理解并熟练运用Java中的向上转型和向...

    java基础_多态

    四、向上转型与向下转型 1. 向上转型(Upcasting):将子类对象赋值给父类引用,这是自动完成的,无需显式转换。 2. 向下转型(Downcasting):将父类引用转换为子类对象,需要进行强制类型转换,并且只有在确定对象...

    Java 面向对象三大特性之多态

    5. **向上转型与向下转型**:在Java中,子类对象可以赋值给父类引用,这被称为向上转型。这种转型在编译时即可完成,因为所有子类都继承自父类。反之,将父类引用转换为子类对象的过程称为向下转型,但需要在运行时...

    java多态小结

    在Java中,多态主要体现在两个方面:**编译时类型与运行时类型的不同**以及**对象的向上转型和向下转型**。 #### 编译时类型与运行时类型 在Java中,每个引用变量都有两种类型:**编译时类型**和**运行时类型**。...

    java 多态.docx

    这是通过`instanceof`关键字和向下转型来实现的。 另外,Java中的方法默认都是虚拟的(相当于C++中的虚函数),这意味着即使方法没有被声明为`abstract`或`final`,在子类中也可以被重写,并在运行时根据对象的实际...

    Java学习笔记(多态封装)

    - **类型转换**:在Java中,我们可以进行向上转型(Upcasting)和向下转型(Downcasting)。向上转型是自动的,安全的,例如`Animal a = new Dog();`,而向下转型需要显式进行,如`Dog d = (Dog) a;`,并需要配合`...

    289.287.JAVA基础教程_面向对象(中)-向下转型的几个常见问题(289).rar

    本教程将深入探讨Java基础中的面向对象部分,特别是关于向下转型的几个常见问题。 1. **什么是向下转型?** 向下转型(Downcasting)是指将父类类型的引用或对象转换为子类类型的过程。在Java中,当一个父类引用...

Global site tag (gtag.js) - Google Analytics