Java 继承

1.继承的概念,分类与实现

(1).继承的概念

  • 在面向对象程序设计中,继承表示两个类之间的一种关系,是一种由已有类创建新类的机制。
  • 子类不仅可以从父类中继承成员变量和方法,还可以重新定义它们以及扩充新的内容。
  • Java继承具有单继承的特点, 每个子类只有一个直接父类。
  • 类:类是具有共同属性的一组对象。它是创建对象的模板或蓝图。

  • 子类:子类是继承其他类的类。它也称为派生类,扩展类或子类。

  • 超类/父类:超类是子类继承功能的类。它也称为基类或父类。

(2).继承的分类

1.单继承:一个子类最多只能有一个父类。

2.多继承:一个子类可有两个以上的父类。

使用继承的注意点:

  • Java的类只支持单继承,而接口支持多继承,即Java多继承的功能是通过接口方式来间接实现的。
  • 子类一般比父类包含更多的属性和方法。
  • 父类中的 private 成员在子类中是不可见的,因此在子类中不能直接使用它们。
  • 父类和其子类间必须存在“是一个”即“is-a”的关系,否则不能用继承。但也并不是所有符合“is-a”关系的都应该用继承。例如,正方形是一个矩形,但不能让正方形类来继承矩形类,因为正方形不能从矩形扩展得到任何东西。正确的继承关系是正方形类继承图形类。

(3)继承的实现

子类定义的一般格式:

[类修饰符]  class 子类名 extends 父类名 {

       成员变量定义;

       成员方法定义;

}

在子类的定义中,用关键字extends 来,明确指出它所继承的父类。例如:

class Student extends person {         } 

其中person类叫作父类,也称为超类或基类;Student 类叫作子类,也叫派生类。

例如Person类:

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

 Student类:

class Student {
         private String name ;
         private int age ;
         private String school ;
         public void setName(String name) {
                   this.name = name ;
         }
         public void setAge(int age) {
                   this.age = age ;
         }
         public void setSchool(String school) {
                   this.school = school ;
         }
         public String getName() {
                   return this.name ;
         }
         public int getAge(){
                   return this.age ;
         }
         public String getSchool() {
                   return this.school ;
         }
}

观察继承的基本实现:

package com.wz.extendsdemo;

class Person {
    private String name;
    private int age;

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

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

    public String getName() {
        return this.name;
    }

    public int getAge() {
        return this.age;
    }
}

class Student extends Person { // Student类继承了Person类
}

public class TestDemo {
    public static void main(String args[]) {
        Student stu = new Student(); // 实例化的是子类
        stu.setName("张三"); // Person类定义
        stu.setAge(20); // Person类定义
        System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge());
    }
}

 运行结果:

姓名:张三,年龄:20

2.构造方法在继承中的应用

(1).构造方法的继承遵循以下原则:

  1. 子类无条件地继承父类的无参数的构造方法。
  2. 如果子类没有定义构造方法,则它将继承父类无参数的构造方法为自己的构造方法。如果子类定义了构造方法,则在创建子类对象时,将先执行来自继承父类的无参数的构造方法,然后再执行自己的构造方法。
  3. 对于父类带参数的构造方法,子类可以通过在自己的构造方法中使用super关键字来调用它,但这个调用语句必须是子类构造方法中的第一条可执行语句。  

 (2).不管是构造父类对象还是子类对象,都要遵循以下步骤执行:

  • 静态语句的执行。
  • 成员变量的初始化。
  • 语句块的初始化。
  • 构造方法的执行。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值