Java基础之继承性

面向对象的特征之二:继承性 

继承性的有优势

1.减少代码的冗余,提高代码的复用性

2.便于功能的扩展

3.为多态性的使用,提供了前台

继承性的格式 :class    A extends B{}

A:子类、派生类 、subclass

B:  父类 、超类、superclass

体现: 一旦子类A继承父类以后,子类A中就获取了父类B中声明的结构,属性、方法;

特别的父类声明private的属性或方法,子类继承父类以后,仍然认为获取父类中私有的结构

只是因为封装性的影响,不能直接调用

子类继承父类后,还可以声明自己额外的属性和方法

继承性的规定

一个父类可以有多个子类

一个子类只能有一个父类

子父类是相对的概念

可以多层继承

继承性关键字

子类直接继承的类:称为直接父类;间接继承:间接父类

子类继承父类后,就获取了父类的所有属性和方法以及所有间接父类的所以属性和方法

如果一个类没有显示声明一个类的父类,则默认继承java.lang.Object类

所有类都直接或间接继承Java.lang.Object类

父类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.chenxi.java;
 
public class Person {
    String name;
    int age;
    public Person(){
 
    }
    public Person(String name,int age){
        this.name=name;
        this.age= age;
    }
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
}

  子类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.chenxi.java;
//extends 继承性关键字
public class Student extends Person {
//    String name;
//    int age;
    String major;
    public Student(){
 
    }
    public Student(String name,int age,String major){
        this.name= name;
        this.age= age;
        this.major=major;
 
    }
//    public void ead(){
//        System.out.println("吃饭");
//    }
//    public void sleep(){
//        System.out.println("睡觉");
//    }
    public void study(){
        System.out.println("学习");
    }
 
}

  测试代码

1
2
3
4
5
6
7
8
9
10
11
12
package com.chenxi.java;
 
public class ExtendsTest {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.age = 1;
        p1.eat();
        Student s1 =new Student();
        s1.eat();
        s1.sleep();
    }
}

  测试结果

1
2
3
吃饭
吃饭
睡觉

  修改代码

父类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.chenxi.java;
 
public class Person {
    String name;
    private int age;
    public Person(){
 
    }
    public Person(String name,int age){
        this.name=name;
        this.age= age;
    }
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public int getAge() {
        return age;
    }
}

  子类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.chenxi.java;
//extends 继承性关键字
public class Student extends Person {
//    String name;
//    int age;
    String major;
    public Student(){
 
    }
//    public Student(String name,int age,String major){
//        this.name= name;
////        this.age= age;
//        this.major=major;
//
//    }
//    public void ead(){
//        System.out.println("吃饭");
//    }
//    public void sleep(){
//        System.out.println("睡觉");
//    }
    public void study(){
        System.out.println("学习");
    }
 
}

  测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.chenxi.java;
 
public class ExtendsTest {
    public static void main(String[] args) {
        Person p1 = new Person();
//        p1.age = 1;
        p1.eat();
        Student s1 =new Student();
        s1.eat();
        s1.sleep();
        s1.setAge(9);
        System.out.println(s1.getAge());
    }
}

 结果

1
2
3
4
吃饭
吃饭
睡觉
9

  

 间接父类

1
2
3
4
5
6
package com.chenxi.java;
 
public class Creatuer {
    public void breath(){
        System.out.println("呼吸");
    }

  直接父类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.chenxi.java;
 
public class Person extends Creatuer {
    String name;
    private int age;
    public Person(){
 
    }
    public Person(String name,int age){
        this.name=name;
        this.age= age;
    }
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public int getAge() {
        return age;
    }
}

  子类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.chenxi.java;
//extends 继承性关键字
public class Student extends Person {
//    String name;
//    int age;
    String major;
    public Student(){
 
    }
//    public Student(String name,int age,String major){
//        this.name= name;
////        this.age= age;
//        this.major=major;
//
//    }
//    public void ead(){
//        System.out.println("吃饭");
//    }
//    public void sleep(){
//        System.out.println("睡觉");
//    }
    public void study(){
        System.out.println("学习");
    }
 
}

  测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.chenxi.java;
 
public class ExtendsTest {
    public static void main(String[] args) {
        Person p1 = new Person();
//        p1.age = 1;
        p1.eat();
        Student s1 =new Student();
        s1.eat();
        s1.sleep();
        s1.setAge(9);
        System.out.println("-----------------");
        s1.breath();//间接父类继承
        System.out.println(s1.getAge());
    }
}

  结果

1
2
3
4
5
6
吃饭
吃饭
睡觉
-----------------
呼吸
9

  

 

posted @   烟雨楼台,行云流水  阅读(98)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
历史上的今天:
2020-04-03 mysql 表创建操作
点击右上角即可分享
微信分享提示