Java继承

继承的概念

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承关键字

1.extends关键字

在Java中如果要想要实现继承,可以直接使用如下的语法来表示。

class 父类{}        // 定义父类

class 子类 extends 父类{}  // 使用extends关键字实现继承

:通过子类扩展父类的功能

package charjava;


class Cat { // 定义Cat类
    private String name; // 定义name属性
    private int age; // 定义age属性
    public String getName() { // 取得name属性
        return name;
    }
    public void setName(String name) { // 设置name属性
        this.name = name;
    }
    public int getAge() { // 取得age属性
        return age;
    }
    public void setAge(int age) { // 设置age属性
        this.age = age;
    }
}
class Student extends Cat { // Student是Cat的子类
    private String school; // 新定义的属性school
    public String getSchool() { // 取得school属性
        return school;
    }
    public void setSchool(String school) { // 设置school属性
        this.school = school;
    }
}
public class java13 {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("张三"); // 此时访问的方法是父类中的,子类中并没有定义
        student.setAge(30); // 此时访问的方法是父类中的,子类中并没有定义
        student.setSchool("清华大学"); // 此时的方法是在子类中定义的
        System.out.println("姓名:" + student.getName() + ",年龄:" + student.getAge() + ",学校:" + student.getSchool());
    }
}

 注意:只允许多层继承不能多重继承。一个子类只能继承一个父类;一个子类可以有一个父类,一个父类还可以有一个父亲。

implements关键字

package charjava;

interface A {
    void eat();
    void sleep();
}
interface B {
    void show();
}
class C implements A,B {
    public void eat() {
        System.out.println("大口吃");
    }
    public void sleep() {

    }
    public void show() {

    }
}
public class java14 {
    public static void main(String[] args) {
        C c = new C();
        c.eat();
    }
}

在使用继承的时候也应注意的是:子类是不能直接访问父类中的私有成员的,但是子类可以调用父类中的非私有方法,但是不能直接调用父类中的私有成员。

继承的特性

  • 子类拥有父类非private的属性、方法。
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
  • 子类可以用自己的方式实现父类的方法。
  • Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如B类继承A类,C类继承B类,所以按照关系就是B类是C类的父类,A类是B类的父类,这是Java继承区别于C++继承的一个特性。
  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。

super关键字的作用

使用super可以从子类中调用父类中的构造方法、普通方法、属性。

例:使用super调用父类中的指定构造方法

package charjava;

class Horse { // 定义父类Horse
    private String name; // 定义name属性
    private int age; // 定义age属性
    public Horse(String name, int age) { // 通过构造方法设置name和age
        this.setName(name); // 设置name属性内容
        this.setAge(age); // 设置age属性内容
    }
    public String getName() { // 取得name属性
        return name;
    }
    public void setName(String name) { // 设置name属性
        this.name = name;
    }
    public int getAge() { // 取得age属性
        return age;
    }
    public void setAge(int age) { // 设置age属性
        this.age = age;
    }
    public String getInfo() { // 信息输出
        return "姓名:" + this.getName() + ";年龄:" + this.getAge();
    }
}
class Age extends Horse { // Age是Horse的子类,扩展父类的功能
    private String school; // 新定义的属性school
    public Age(String name, int age, String school) {
        super(name, age); // 指定调用父类中的构造方法
        this.setSchool(school);
    }
    public String getSchool() { // 取得school属性
        return school;
    }
    public void setSchool(String school) { // 设置school属性
        this.school = school;
    }
    public String getInfo() { // 覆写父类中的方法
        return super.getInfo() + ";学校:" + this.getSchool(); // 扩充父类的方法
    }
}
public class java15 {
    public static void main(String[] args) {
        Age age = new Age("张三",30,"清华大学");
        System.out.println(age.getInfo()); // 打印信息,调用覆写过的方法
    }
}

   this与super的区别                 

   

序号区别点thissuper
1属性访问访问本类中的属性,如果本类没有此属性则从父类中继续查找访问父类中的属性
2方法访问本类中的方法,如果本类中没有此方法,则从父类中继续查找直接访问父类中的方法
3调用构造调用本类构造,必须放在构造方法的首行调用父类构造,必须放在子类构造方法的首行
4特殊表示当前对象无此概念

final关键字

final在Java中表示的意思是最终的意思,也可以称为完结器。可以使用final关键字声明类、属性、方法,在声明时要注意以下几点:

  1. 使用final声明的类不能有子类;
  2. 使用final声明的方法不能被子类所覆写;
  3. 使用final声明的变量即成为常量,常量不可以修改。 

声明类:

final class 类名 {//类体} 

声明方法:

修饰符(public /private /default /protected) final 返回值类型 方法名() { // 方法体} 

注意:final定义的类,其中的属性、方法不是final的。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值