跳到主要内容

java:对象的转型

管

管理员

https://www.cnblogs.com/tinyphp/p/3713299.html

2018年03月31日 1,994 次阅读
本页目录

面向对象编程有三个特征,即封装、继承和多态,学习多态必须了解向上转型和向下转型。

一、向上转型:将子类对象赋值给父类的引用

动物 a=new 狗();//这就为向上转型

向上转型都会成功,是安全的。 就像说狗是动物没问题。

 语法:

a是引用变量,指向了d对象

class Test{
    public static void main(String args[]){
        Dog d=new Dog();    //Dog继承了Animal
        Animal a=d;            //向上转型
    }
}

或

class Test{
    public static void main(String args[]){
        Animal a=new Dog();            //向上转型
    }
}

 父类可以用子类对象内容,但不可以直接调用子类的成员属性和成员方法

如:jump在子类里面有,在父类没有

class Test{
    public static void main(String args[]){
        Animal a=new Dog();            //向上转型
        a.jump();                    //这会报错
    }
}

 父类定义了eat方法,如果子类重写了该方法,那么父类的引用将会调用子类的方法(动态连接、动态调用)

class Test{
    public static void main(String args[]){
        Animal a=new Dog();            //向上转型
        a.eat();                    //将调用子类的
    }
}

 总的来说:Father的对象可访问Son从Father中继承来的和Son复写Father的方法。其它的方法都不能访问。

二、向下转型:将父类的对象赋值给子类的引用

 语法:

向下转型的前提是首先进行向上转型(a的类型不是Dog,所以需要先向上转型为Dog)

复制代码
class Test{
    public static void main(String args[]){
        Dog d1=new Dog();
        Animal a=d1;        //a指向的对象就是一只狗
        Dog d2=(Dog)a;        //(Dog)强制类型转换  向下转型    
    }
}
复制代码

狗是动物,那么动物是狗吗?不对,所以下面这方法是不对的

class Test{
    public static void main(String args[]){
        Animal a=new Animal();        
        Dog d2=(Dog)a;        
    }
}

Related

相关文章

同分类文章 →
2024年12月27日 java

Spring 事务中的几种隔离级别介绍

  Spring 为了方便用户设定事务的隔离级别,专门定义了一个枚举类:Isolation。这个枚举类和事务传播行为的枚举类很像。 public enum Isolation { DEFAULT(TransactionDefinition.ISOLATION_DEFAULT), READ_UNC

2021年07月07日 java

&&的优先级

&&的优先级高于|| 这里就有一种特殊情况:如果表达式中含有||,总是先算 || 左边的子表达式,这里是((a+1)>0)永远先于(((++a)<0) && (!((b--)<=0)))计算(并且由于优先级,先计算a+1,再与0比较,而不是先将1与0比较,再和a相加),如果 || 左边的

2021年03月29日 java

求圆心到点的直线与圆的相交点.

若O(x1,y1),A(x2,y2)满足OA>r。 则向量OA=(x2-x1,y2-y1),可设向量OB=(m,n),则有:m(y2-y1)-n(x2-x1)=0且(m-x1)²+(n-y1)²=r²。 解得B((x2-x1)r/√(x2-x1)²+(y2-y1)²,(y2-y1)r/√(x2-x1)&s

WeChat

扫码加我微信

微信二维码