zoukankan      html  css  js  c++  java
  • java之父类中的构造器是否能被子类继承?

    子类默认继承父类的属性和方法,但不会继承父类的构造器,而是在子类被实例化时会默认调用父类的空构造器。子类在创建的时候会调用自己的空构造器,并在空构造器会隐式调用super(),即父类的空构造器。如果父类的构造器被重载,那么子类中的构造器也必须初始化父类的构造器,否则会报编译错误。当然,只要父类中显示定义了空构造器,子类中就不必初始化父类的构造器。例如:
    父类Person.java

    package myjava;
    
    public class Person {
        private String name;
        private int age;
    
        public void setName(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public int getAge() {
            return this.age;
        }
        
        public Person(String name) {
            this.name = name;
        }
    }

    子类:Student.java

    package myjava;
    
    public class Student extends Person{
        //这里必须初始化父类重载后的构造方法,否则会报错
        public Student(String name) {
            super(name);
        }
        
    }

    Test.java

    package myjava;
    
    public class Test {
        public static void main(String[] args) {
            
            Person p = new Person("tom");
            Student stu = new Student("jack");
            String personName = p.getName();
            String studentName = stu.getName();
            System.out.println(personName);
            System.out.println(studentName);
    }

    输出:

    tom

    jack

    说明:此时父类中没有显示定义空构造器,只有一个重载了的构造器,在子类构造器中,必须初始化父类的构造器,即super关键字+父类构造器中的参数。

  • 相关阅读:
    iOS-夜间模式(换肤设置)
    iOS-自定义起始时间选择器视图
    [SpriteKit] 系统框架中Cocos2d-x制作小游戏ZombieConga
    [SceneKit] 不会 Unity3D 的另一种选择
    Android WiFi开发
    Java 工具类 —— 定时器(Timer/TimerTask)
    java 语法 —— 数组
    IDEA 的使用(快捷键、括号对齐的方式)
    cmd 高级用法
    MySQL 基本信息的查询(初始化配置信息 my.ini)
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12048593.html
Copyright © 2011-2022 走看看