第10章 接口、继承与多态 对象类型的转换

向上转型:

  将子类对象看作是父类对象;

  解释:平行四边形是四边形的一种,那么就可以将平行四边形对象看作是一个四边形对象。例如:鸡是家禽的一种,而家禽是动物中的一类,那么也可以将鸡对象看作是一个动物对象。

package ten;
class Quadrange{//四边形类
    public static void draw(Quadrange q){//四边形类中的方法
    }
}
public class Parallelogram extends Quadrange{//平行四边形类,继承了四边形类
    public static void main(String[] args){
        Parallelogram p=new Parallelogram();//实例化平行四边形类对象引用
        draw(p);//调用父类方法
    }
}四边形类存在一个draw()方法,它的参数是Quadrange(四边形类)类型,而在平行四边形类的主方法中调用draw()时给予的参数类型是Parallelogram(平行四边形类)类型的。这就相当于“Quadrange obj=new Parallelogram();”就是把子类对象赋值给父类类型的变量。试想一下正方形类对象可以作为draw()方法的参数,梯形类对象同样也可以作为draw()方法的参数,如果在四边形类的draw()方法中根据不同的图形对象设置不同的处理,就可以做到在父类中定义一个方法完成各个子类的功能,这样可以使同一份代码毫无差别地运用到不同类型之上,这就是多态机制的基本思想。

 向下转型:

  将抽象类转换为较具体的类,这样的转型通常会出现问题,例如,不能说四边形是平行四边形的一种、所有的鸟都是鸽子等。可以说子类对象总是父类的一个实例,但父类对象不一定是子类的实例。

package ten;
class Quadrange{
    public static void draw(Quadrange q){
        }
}
public class Parallelogram2 extends Quadrange {
    public static void main(String[] args){
        draw(new Parallelogram());//将平行四边形对象看作是四边形队形,称为向上转型操作
        //向下转型
        Quadrange q=new Parallelogram();
        //Parallelogram p=q;将父类对象赋予子类对象,这种写法是错误的
        Parallelogram p=(Parallelogram) q;//将父类对象赋予子类对象,并强制转换为子类型,这种写法是正确的
    }
}
//备注:如果将父类对象对象直接赋予子类,会发生编译错误,因为父类对象不一定是子类的实例,例如:一个四边形不一定就是指平行四边形,它也许是梯形,也许是正方形等。
时间: 2024-12-14 18:08:26

第10章 接口、继承与多态 对象类型的转换的相关文章

JavaScript中对象类型的转换小结

对象到字符串和对象到数字类型的转换涉及到两个重要的方法,最终的转换结果会受到这两个方法返回结果的影响,这两个方法就是toString和valueOf.所有的对象都会从Object对象中继承到这两个方法.toString方法 用于返回对象的字符串表示(但是其实也可以不返回字符串).对于默认从Object继承而来的toString方法并不会返回太多有意义的内容.而valueOf方法目的是返回一个可以表示对象的原始类型值,但是由于对象的复杂性,大多数情况下根本不可能用一个原始类型值来表示,所以默认的v

第10章 接口、继承与多态 抽象类和接口

一.抽象类 在解决实际问题时,一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理.回想继承和多态原理,继承树中越是在上方的类越抽象,如:鸽子类继承鸟类.鸟类继承动物类等.在多态机制中,并不需要将父类初始化对象,我们需要的只是子类对象,所以在Java语言中设置抽象类不可以实例化对象,因为图形类不能抽象出任何一种具体图像,但它的子类却可以. 抽象类的语法如下:使用abstract关键字定义的类称为抽象类,而使用这个关键字定义的方法称为抽象方法,抽象方法没有方法体,这个方法本身没有任何意义,除

第10章 接口、继承与多态 多态

利用多态可以使程序具有良好的扩展性,并可以对所有类对象进行通用的处理. 如果定义一个四边形类,让它处理所有继承该类的对象,根据“向上转型”原则可以使每个继承四边形类的对象作为draw()方法的参数,然后在draw()方法中做一些限定就可以根据不同图形类对象绘制相应的图像,从而更为通用的四边形类来取代具体的正方形类和平行四边形类.这样处理能够很好地解决代码冗余问题,同时也易于维护,因为可以加入任何继承父类的子类对象,而父类方法也无需修改. package ten; public class Qua

10.3 对象类型的转换

1.向上转型 a.平行四边形类继承了四边形类,常规的继承图都是讲顶级类设置在页面的顶部,然后逐渐向下,所以将子类对象看做是父类对象被称为"向上转型".由于向上转型是ongoing一个具体的类型到较抽象类型的转换,所以它总是安全的,如可以说是平行四边形是特殊的四边形,但不能说四边形是平行四边形. b.如果在四边形父类的draw()方法中根据不同的图形对象设置不同的处理,就可以做到父类中定义一个方法完成各个子类的功能,这样可以使用同一份代码毫无差别地运用到不同类型之上,这就是多态机制的基本

第七章 课堂例子 怎样判断对象是否可以转换?

怎样判断对象是否可以转换? 可以使用instanceof运算符判断一个对象是否可以转换为指定的类型: Object obj="Hello"; if(obj instanceof String) System.out.println("obj对象可以被转换为字符串"); public class ka { public static void main(String[] args) { //声明hello时使用Object类,则hello的编译类型是Object,Ob

第10章 接口、继承与多态 类的继承3

尝试创建一个父类,在父类中创建两个方法,在子类中创建覆盖第二个方法,为子类创建一个对象,将向上转型到基类并调用这个方法 class Testmain{ public static void method1(Testmain q){ System.out.println(1); } public static void method2(){ System.out.println(2); } } public class Test extends Testmain { public static v

第10章 接口、继承与多态 Object类

在Java中,所有的类都直接或间接继承了java.lang.Object类.Object类是比较特殊的类,它是所有类的父类,是Java类层中的最高层类.当创建一个类时,总是在继承,除非某个类已经指定要从其他类继承,否则它就是从Java.lang.Object类继承而来. Java中的每个类都源于java.lang.Object类,如:String.Integer等都是继承于Object类,除此之外自定义的类也都继承于Object类,由于所有类都是Object子类,所以在定义类时,省略了exten

第10章 接口、继承与多态 类的继承2

在Java中一切都以对象的形式进行处理. 1)实例化子类对象时首先要实例化父类对象,然后再实例化子类对象,所以在子类构造方法访问父类的构造方法之前,父类已经完成实例化操作: 2)在实例化子类对象时,父类无参构造方法将被自动调用,但有参构造方法并不能被自动调用,只能依赖于super关键字显式地调用父类的构造方法. package ten; class Parent { Parent(){ System.out.println("调用父类的parent()构造方法"); } } class

第10章 接口、继承与多态 类的继承

1Test2类继承Test类,在子类中可以连同初始化父类构造方法来完成子类初始化操作,既可以在子类的构造方法中使用super()语句调用父类的构造方法,也可以在子类中使用super关键字调用父类的成员方法等,但是子类没有权限调用父类中被修饰为private的方法,只可以调用父类中修饰为public或protected的成员方法等. 2继承并不只是扩展父类的功能,还可以重写父类的成员方法.重写(还可以称为覆盖)就是在子类中将父类的成员方法的名称保留,重写成员方法的实现内容,更改成员方法的存储权限,