首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

面向对象语言特性之继承(2)

面向对象语言特性之继承(2)

继承条件下的构造方法:

    子类构造方法创建对象时,没有通过super显示调用父类有参构造,也没有通过this显式调用自身其他构造方法时,默认调用父类无参构造方法。
    子类构造方法通过super显示调用父类有参构造方法时,执行父类相应的构造方法,而不执行父类的无参构造。
    子类调用自身其他构造方法时遵循以上两条。

示例:

    class Pet {  //父类Pet
        private String name;//父类私有属性
        private int age;
        public Pet() {//父类无参构造
        }
        public Pet(String name, int age) {//父类有参构造
            this.name = name;
            this.age = age;
        }
        void showInfo(){  //父类中的方法,显示宠物名字和年龄
            System.out.println("宠物名字是"+name+"年龄是"+age);
        }
    }
     
    class Dog extends Pet{ //Dog类继承Pet类
        String strain;  //扩展自己的属性
     
        public Dog() {
        }
        public Dog(String name, int age,String strain) {
            super(name,age);  //super调用父类有参构造
            this.strain = strain;
        }
        
        void showDog(){
            super.showInfo();//super调用父类中的方法
            System.out.println("宠物是一狗狗,品种是"+strain);
        }
    }
     
    class Cat extends Pet{
        String sex;
     
        public Cat() {
        }
        public Cat(String sex) {//没有显示调用父类有参构造,将默认调用父类无参构造
            this.sex = sex;
        }
        
        //重写了父类中的同名方法,而没有用super调用父类中的同名方法,父类中的方法就被覆盖了
        void showInfo(){
            System.out.println("我是一只小猫");
        }
    }
     
    class Tests{
        public static void main(String[] args) {
        //狗狗并没有继承Pet的name和age属性,而是通过父类public的构造方法间接访问
            Dog dog = new Dog("旺财",3,"哈士奇");
            Cat cat = new Cat("公");
            dog.showInfo();
            System.out.println("*********");
            dog.showDog();
            System.out.println("*********");
            cat.showInfo();
        }
    }

以上代码将输出:

    宠物名字是旺财年龄是3
    *********
    宠物名字是旺财年龄是3
    宠物是一狗狗,品种是哈士奇
    *********
    我是一只小猫
返回列表