Java多态和继承的相关练习

这周末的作业是关于多态和继承的,做的发现自己对多态和继承的细节还是有些掌握的不是非常好。

习题如下:

 

public class Test {
    public static void main(String[] args) {
        Integer[] list1 = {12, 24, 55, 1};
        Double[] list2 = {12.4, 24.0, 55.2, 1.0};
        int[] list3 = {1, 2, 3};
        printArray(list1);
        printArray(list2);
//        Integer 和 Double 是继承了 Object 的两个类, 而 int 是 java 基本类型, 和 Object 没有继承关系
//        printArray(list3);
    }

    //这里要求传入的参数必须是 Object类型的数组
    //根据java的自动转型可知, 这里除了 Object类型 , 还可以使用继承了 Object的子类
    public static void printArray(Object[] list) {
        for (Object o: list) {
            System.out.println(o + " ");
        }
        System.out.println();
    }
}

 

public class Test1 {
    public static void main(String[] args) {
        new Person().printPerson();
        //由于Student没有printPerson()方法, 所以自动向上转型为Person类
        //从而调用Person类中的printPerson()方法
        //Person类中的getInfo()方法由于子类完成了重写, 所以使用的是子类的getInfo()
        // ==> ((Person)new Student()).printPerson();
        new Student().printPerson();
    }
}

//子类
class Student extends Person{
    //此处重写了父类的getInfo()方法
    @Override
    public String getInfo() {
        return "Student";
    }
}

//父类
class Person {
    public String getInfo() {
        return "Person";
    }

    public void printPerson() {
        System.out.println(getInfo());
    }
}
public class Test2 {
    public static void main(String[] args) {
        new Person().printPerson();
        new Student().printPerson();
    }
}

class Student extends Person {
    //private修饰的方法不能重写
    //所以并不会调用Student的getInfo()方法
    private String getInfo() {
        return "Student";
    }
}

class Person {
    private String getInfo() {
        return "Person";
    }

    //由于是转型后调用, 运行类型已经是Person, 所以可以访问Person的私有属性和方法
    public  void printPerson() {
        System.out.println(getInfo());
    }
}

 

 

 

 

public class Test {
    public static void main(String[] args) {
        A a = new A(5); //调用 A的构造器
    }
}

class A extends B {
    public A(int t) {   //
        //由于继承了B类, 必须完成B的构造方法,
        //而B的构造方法是无参构造, 所以等于这里隐式的调用了B的构造方法
        //super();
        System.out.println("A's constructor is invoked");
    }
}

class B {
    public B(){
        //B是默认继承Object的,所以也调用了Object的无参构造器
        System.out.println("B's constructor is invoked");
    }
}

 对于多态和继承的细节掌握的还不够好,注释不够好的地方等之后学习更多了再做修改。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值