继承与多态---------继承

一、子类对象实例化:

public class Test {
    public static void main(String[] args){
        Student1 stu = new Student1();
        stu.setName("张三");
        stu.setAge(21);
        stu.setSchool("某某大学");
        System.out.println("学生信息:" + stu.getName() + " " + stu.getAge() + " " + stu.getSchool());
    }
}
class Student extends Person{
    private String school;
    public Student(){
        /*子类构造方法有一个隐式super()调用父类构造方法*/
        System.out.println("子类构造方法被调用");
    }
    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }
}
class Person{
    private String name;
    private int age;
    public Person(){
        System.out.println("父类的构造方法被调用!");
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

特殊情况:父类构造器是含参构造器

public Person(String name, int age){

        this.name = name;

        this.age = age;

}

 编译器会报错,如何解决这一问题?

(1)给父类添加无参构造器:

public Person(){}

(2)在子类构造器中,使用super调用父类构造器,并且必须放在第一行的位置:

public Student(String name, int age, String school){

        super(name, age);

        this.school = school;

}

 二、构造方法的继承原则:

(1) 子类无条件地继承父类的不含参数的构造方法。

(2) 若子类没有定义自己的构造方法,它将继承父类无参数的构造方法作为自己的构造方法。

(3) 若子类定义了自己的构造方法,它先执行继承自父类的无参数构造方法,再执行自己的构造方法。

(4) 对父类含参数的构造方法,子类可以通过在定义自己的构造方法中使用super关键字来调用它,但这个调用语句必须是子类构造方法的第一个可执行语句。

(5) 子类构造方法没有显式调用父类构造方法,而父类又没有无参构造方法时,则编译出错。

三、成员变量的隐藏和方法的继承和重写:  

        3.1 成员变量的隐藏:

                如果子类的成员变量和父类的成员变量重名,子类就会隐藏继承的成员变量,子类中访           问的是子类重新声明的成员变量。

        3.2 方法的继承:

                父类非私有方法均可被子类所继承。

        3.3 方法的重写:

                (1)  子类重写的方法与父类的方法名,参数表和返回类型均相同。

                (2)  重写的方法不能比父类的方法有更严格的访问权限。

                访问权限: private < default < public 

              方法重写的作用:不改变源代码的情况下,对某一模块的功能进行改造。

                (3) 当子类想要访问父类被重写的方法时,需要通过super关键字来调用父类被重写的方                       法,super关键字的使用有两种情况:

                     <1> 访问父类的成员变量和成员方法:

                                super.成员变量名

                                super.成员方法名([参数表])

                <2> 调用父类构造方法:

                                super([参数表]) 

                (4)final关键字:   

                 在Java中可以使用final关键字定义类、方法、属性:

       使用 final 关键字定义的类不能有子类
       使用 final 声明的方法不能被子类 所覆盖
      使用final 声明的变量即成为常量,常量必须在声明时给出具体的内容 。 

                 在声明一个常量的时候所有单词的字母都必须大写,如果要想声明一个全局常量的                         话public static final声明。

                 public static final String INFO = "hello"  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值