小翼的java开发俄罗斯方块--------继承的概念(2)

来源:互联网 发布:国内云计算服务提供商 编辑:程序博客网 时间:2024/06/05 14:19

继承:是指从大分类到小分类的过程。

子类继承父类,你有的我都有,你没有的我也有。

package test;

public class Demo3 {
    
    public static void main(String[] args){
         抢劫犯 A =new 抢劫犯("AAA");
        A.doSomething();
        诈骗犯 B =new 诈骗犯("BBB");
        B.doSomething();
            }

}
class 犯人{
    
    protected String name;
    
    public 犯人(String name){
        this.name = name;
    }
    public void doSomething(){
        System.out.println("我叫"+ this.name + "我是一个犯人");
    }
}

class 抢劫犯 extends 犯人{
    
    public 抢劫犯(String name){
        super (name);
    }
    
    public void doSomething(){
        System.out.println("我叫"+ this.name + "我是一个抢劫犯");
    }
}

class 诈骗犯 extends 犯人{
    
    public 诈骗犯(String name){
        super (name);
    }
    
    public void doSomething(){
        System.out.println("我叫"+ this.name + "我是一个诈骗犯");
    }
}

对于如上的代码,最后会输出;我叫AAA我是一个抢劫犯
                                                        我叫BBB我是一个诈骗犯

抢劫犯 A =new 抢劫犯("AAA");可以翻译成如下:

         抢劫犯 A;      //翻译成:我对java说,我需要一块空间,我要放抢劫犯,我给这块空间取一个名字叫A
        A = new 抢劫犯("萨达姆");       //我需要在A这块空间里面放一个抢劫犯,叫萨达姆
        A.doSomething();     //调空间A里面的这个对象的方法

这里如果将上面的两句话:

       抢劫犯 A =new 抢劫犯("AAA");
        A.doSomething();
        诈骗犯 B =new 诈骗犯("BBB");
        B.doSomething();

改为:

       犯人 A =new 抢劫犯("AAA");
        A.doSomething();
        犯人 B =new 诈骗犯("BBB");
        B.doSomething();

最后输出的内容也是一样的。因为申请的一块内存本来是要放的是犯人,最后结果放的是抢劫犯,那么调用这块内存里面的对象的方法的时候,肯定就是对应的抢劫犯的行为。即new的是子类的对象,那么调的就是子类的方法。


现在如果我们要继续什么一个C和D

          抢劫犯 C = A;   //这样会报错,那我们就强制申明
        抢劫犯 C = (抢劫犯)A;     //我需要一个放抢劫犯的空间,我取名字为C,我需要把A空间里面的东西放到C里面,但是java发现A是一块专门放犯人的地方,
                               //因此会报错。所以我们强制申明A为抢劫犯,也就是说我向java保证,A里面肯定放的是一个抢劫犯。最后编译通过了并且输出了:我叫AAA我是一个抢 劫犯

但是

抢劫犯 D = (抢劫犯)B;   //执行了D.doSomething();后,运行报错。因为已经跟java保证过了B里面会输出一个抢劫犯的行为,但是最后执行的时候才发现里面是诈骗犯。

                                       //所以编  译通过了,运行不通过。

0 0