目录

一.类与接口之间的继承:

1.关键字:implements

2.接口的介绍:

3.关系(框架):接口负责定义能做什么---继承类负责定义具体做什么---main负责调用执行

4.下面介绍一个具体的例子:

必要的解释:

5.注意!!!:

 二.类与类之间的继承:

1.关键字:extends

2.格式:

3.注意:

4.下面介绍一个具体的例子:


前言:面向对象有三大特征:封装、继承、多态。这一节我们主要介绍继承。


一.类与接口之间的继承:

1.关键字implements
2.接口的介绍:

接口(即interface) 是与类同级别的结构,也可以作为一种数据类型。由属性与方法组成。

(1)属性:默认由 static final 修饰的

(2)方法:默认为抽象方法,没有方法体

3.关系(框架):接口负责定义能做什么---继承类负责定义具体做什么---main负责调用执行

4.下面介绍一个具体的例子:
package CZX0125;

//接口
public interface Fly {
    void fly();
}

//类bird
class bird implements Fly{
    public void fly() {
        System.out.println("小鸟通过翅膀煽动飞了200米");
    }
}

//类air 
class air implements Fly{
    public void fly() {
        System.out.println("飞机通过引擎推进 飞行了2000公里");
    }
}

class Main{ //class Main 的作用是提供一个程序的入口点
    public static void main(String[] args) {
        Fly  f1=new bird();
        Fly  f2=new air();
        f1.fly();
        f2.fly();
    }

}

 运行结果:

必要的解释:

1.接口Fly只声明了方法fly,但没有具体实现方法fly(即没有方法体)

2.class bird/air implements Fly{ }定义一个名为 bird/air 的类,让它实现 Fly 这个接口里的所有方

法,并重写所有方法(含方法声明与方法体)。

3.class Main 的作用是提供一个程序的入口点,因为main也是一个方法,必须在类里面。

4. 

这一片段的作用有:

创建 bird 和 air 的实例(对象)

把它们赋值给 Fly 类型的引用

调用 fly() 方法,输出不同的飞行行为


5.注意!!!:

1.普通类实现接口后,必须重写并实现接口中所有的抽象方法(补充方法体)

2.接口中的方法默认是 public 修饰的,实现类重写方法时,必须也用 public 修饰

3. Java 接口中,所有方法默认都是 public abstract 的,只不过接口中的方法默认省略了public abstract 。如 Fly 接口里的 void fly(); 本质上就是 public abstract void fly();

所以继承接口的类 在重写方法时,方法必须加上public,而abstract修饰的方法是没有方法体、只有声明的抽象方法,所以不用写abstract,如

4.

bird f1=new bird(); 可以写成 Fly f1=new bird();的原因:

是java多态类的核心写法(即向上转型):即父类型引用指向子类型对象的写法

(接口等价于父类型,是更抽象、通用的类型;实现类,属于更具体的子类型;)


 二.类与类之间的继承:

1.关键字:extends
2.格式:class 子类名  extends  父类名{ }

可以继承属性、方法、类型

3.注意:

1.继承关系(is-a)不是包含关系(has-a)。父类与子类之间没有包含关系子类的行为/属性是父类的继承扩展,子类是父类的一种特殊类型

继承关系判断口诀:子类  is  a  父类 

例如:Dog is a animal

2.子类不会拥有父类的所有属性和方法

3.子类可以直接复用父类中符合权限要求的属性和方法,无需重复编写代码,同时还能新增自己独有的成员,或重写父类方法实现个性化逻辑。

4.一个子类只能直接继承一个父类


4.下面介绍一个具体的例子:
package CZX0810;

public class Student {
    String name;
    int age;
    int id;
    int score;

    public void showInfo() {
        System.out.println("- 学生信息 -");
        System.out.println(name);
        System.out.println(age);
        System.out.println(id);
        System.out.println(score);
    }
    public void read(){
        System.out.println(name + "正在阅读");
    }
}

class UNStudent extends Student {
    int cet_4;
// 子类重写父类方法 ,进行功能的补充 重构 增加,子类对象可以优先调用重写之后的 多态的实现之一
    public void showInfo() {
        super.showInfo(); // this 指代本类自己 super 指代本类的父类
        System.out.println("英语4级成绩:"+cet_4);
    }
}

class MIDStudent extends Student {
    int mid_math;
    public void read(){
        System.out.println(name+"正在阅读高中数学书,数学分数是:"+mid_math);
    }
}

class StuMan {
    public static void main(String[] args) {
        UNStudent unstu = new UNStudent();
        MIDStudent midStu = new MIDStudent();

        unstu.name = "张三";
        unstu.age = 20;
        unstu.cet_4 = 500;

        midStu.name = "李四";
        midStu.age = 15;
        midStu.mid_math = 140;

        midStu.showInfo();
        unstu.showInfo();
        midStu.read();
        unstu.read();
    }
    };

运行结果:


注意:

    等同于,运行结果相同。

子类对象向上转型 - 自动转型 ,将子类对象在内存中地址 存入一个父类类型变量名中。
是多态的使用。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐