Java中的继承定义与使用

1、继承的本质:在已有类的功能上继续进行功能的扩充

2、继承的实现:关键词:extends;语法:class   子类   extends  父类   {}

          注意:子类也可以称为派生类,父类也可称为超类

          继承的实现:

package Test;
class Person{
    private String name;
    private int age;

    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;
    }


}

class Student extends Person{

}

public class Demo3 {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.setName("里斯");
        stu.setAge(18);
        System.out.println("姓名:"+stu.getName() + "、年龄:" + stu.getAge());
        //结果:姓名:里斯、年龄:18

    }
}

          通过extends关键词,子类Student继承了父类Person的方法和实现。继承实现的主要目的是在于子类可以重用父类中的结构,并且也可以实现功能的扩充,同时强调:子类可以定义更多的内容,并且描述的范围更小

子类扩充案例:

package Test;
class Person{
    private String name;
    private int age;

    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;
    }


}

class Student extends Person{
    private String school;

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }
}

public class Demo3 {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.setName("里斯");
        stu.setAge(18);
        stu.setSchool("社会大学");
        System.out.println("姓名:"+stu.getName() + "、年龄:" + stu.getAge() + "、大学:" + stu.getSchool());
        //结果:姓名:里斯、年龄:18

    }
}

          注意:子类可以操作父类的属性

3、子类实例化对象的流程

package Test;
class Person{
   public Person(){
       System.out.println("Person构造方法");
   }

}

class Student extends Person{
   public Student(){
       System.out.println("Student构造方法");
   }
}

public class Demo3 {
    public static void main(String[] args) {
        //只实例化子类对象
        new Student();
        //结果:Person构造方法
              //Student构造方法

    }
}

          从上面的简单程序中可以看出,我们实例化子类对象时,子类的构造方法会先调用父类的构造方法。即默认情况下的子类对象实例化流程会自动实例化父类对象。实际上这个时候就相当于子类的构造方法里面隐含了一个"super()"方法的调用。

          super():表示的就是子类构造调用父类构造的语句,该语句只允许放在子类构造方法的首行。在默认情况下,子类只会调用父类中的无参构造方法,所以写与不写“super()”区别不大,但是如果说你的父类里面没有提供无参构造,这时需要使用“super()”明确调用有参构造。

package Test;
class Person{
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

class Student extends Person{
    private String school;
    public Student(String name,int age,String school){
        //明确调用父类构造,有参构造
        super(name, age);
        this.school = school;

    }

}

public class Demo3 {
    public static void main(String[] args) {
        //只实例化子类对象
        new Student("里大",30,"社会");
        //结果:Person构造方法
              //Student构造方法

    }
}

          结论:在实例化子类对象的同时,一定会实例化父类对象。目的时为了所有的属性可以进行空间的分配。

          super与this都可以调用构造方法,super()是由子类调用父类的构造,而this是调用本类构造,并且一定都要放在构造方法首行,所以两个语句不允许同时出现。

4、继承定义的相关限制

          要求:

                    1)Java之中不允许多重继承,只允许多层继承

                    2)在进行继承关系定义的时候,实际上子类可以继承父类中的所有操作结构。但是对于私有操作属于隐式继承,而所有的非私有操作属于显示继承。

5、final在Java中表示的意思是最终,也可称为完结器。

          在使用final关键字声明类、属性、方法时,需要注意以下几点:

                    1)使用final声明的类不能有子类;

                    2)使用final声明的方法不能被子类所覆写;

                    3)使用final声明的变量即成为常量,常量不可以修改

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值