14.Java 继承

Java 继承

在这里插入图片描述

1.继承的概念

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

2.类的继承格式
class 父类 {
} 
class 子类 extends 父类 { 
}
3.为什么需要继承
  1. 继承的好处

    • 提高了代码的复用性

    • 提高了代码的维护性

    • 让类与类之间产生了关系,是多态的前提

  2. 继承的弊端

    • 类的耦合性增强了。

开发的原则:高内聚,低耦合。

耦合:类与类的关系

内聚:就是自己完成某件事情的能力

4.继承类型

在这里插入图片描述

5.继承的特性
  • 子类拥有父类非 private 的属性、方法。

  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

  • 子类可以用自己的方式实现父类的方法。

  • Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。

  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。

  • 子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。

  • 不要为了部分功能而去继承

6.继承关键字

继承可以使用 extends 和 implements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类。

6.1.extends关键字

在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。

public class Animal { 
    private String name; 
    private int id; 
    public Animal(String myName, String myid) { 
    //初始化属性值 
         } 
    public void eat() { 
    //吃东西方法的具体实现
         } 
    public void sleep() {
    //睡觉方法的具体实现
         }
    } 
public class Penguin extends Animal{
}
6.2.implements关键字

使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

public interface A { 
    public void eat(); 
        public void sleep(); 
    } 
    public interface B {
        public void show();
    } 
public class C implements A,B {
}
6.3.super 与 this 关键字
  1. this和super都代表什么

    • this:代表当前对象的引用,谁来调用我,我就代表谁

    • super:代表当前对象父类的引用

  2. this和super的使用区别

    • 调用成员变量
      this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
      super.成员变量 调用父类的成员变量

    • 调用构造方法
      this(…) 调用本类的构造方法
      super(…) 调用父类的构造方法

    • 调用成员方法
      this.成员方法 调用本类的成员方法,也可以调用父类的方法
      super.成员方法 调用父类的成员方法

class Animal { 
void eat() { 
System.out.println("animal : eat");
        }
} 
class Dog extends Animal { 
void eat() { 
System.out.println("dog : eat"); 
    } 
void eatTest() { 
this.eat(); 
// this 调用自己的方法 
super.eat(); 
// super 调用父类方法 
    }
} 
public class Test {
    public static void main(String[] args) { 
    Animal a = new Animal();
    a.eat(); 
    Dog d = new Dog();
    d.eatTest(); 
        }
}

输出结果为:
animal : eat
dog : eat
animal : eat

6.4.final关键字

final 关键字声明类可以把类定义为不能继承的,即最终类;
或者用于修饰方法,该方法不能被子类重写:

  • 声明类:
    final class 类名 {//类体}

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

  • final修饰变量的初始化时机
    显示初始化
    在对象构造完毕前即可

7.继承中的构造方法

子类中所有的构造方法默认都会访问父类中空参数的构造方法

  • 为什么呢?
    因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。

  • 其实:
    每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。(每一个构造方法都访问了最顶层的父类)
    子类中还有super()的语句,默认访问父类的空参构造方法。

  • 父类没有无参构造方法,子类怎么办?
    super解决
    this解决

注意事项:

super(…)或者this(….)必须出现在构造方法的第一条语句上

8.构造器

子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。


class SuperClass { 
    private int n;
    SuperClass(){ 
    System.out.println("SuperClass()"); 
    } 
    SuperClass(int n) {
    System.out.println("SuperClass(int n)"); 
    this.n = n;
    }
} 
    // SubClass 类继承 
    class SubClass extends SuperClass{ private int n;         SubClass(){ 
    // 自动调用父类的无参数构造器
    System.out.println("SubClass");
    } 
    public SubClass(int n){ super(300); 
    // 调用父类中带有参数的构造器 
    System.out.println("SubClass(int n):"+n); this.n = n; 
    }
} 
    // SubClass2 类继承
    class SubClass2 extends SuperClass{ 
    private int n; 
    SubClass2(){ 
    super(300); 
    // 调用父类中带有参数的构造器 
    System.out.println("SubClass2");
    } 
    public SubClass2(int n){
    // 自动调用父类的无参数构造器 
    System.out.println("SubClass2(int n):"+n); this.n = n; 
    }
} 
    public class TestSuperSub{ 
    public static void main (String args[]){ 
    System.out.println("------SubClass 类继承------"); 
    SubClass sc1 = new SubClass(); 
    SubClass sc2 = new SubClass(100);                           System.out.println("------SubClass2 类继承------");       SubClass2 sc3 = new SubClass2();
    SubClass2 sc4 = new SubClass2(200);
    }
}

输出结果为:

------SubClass 类继承------
SuperClass()
SubClass
SuperClass(int n)
SubClass(int n):100
------SubClass2 类继承------
SuperClass(int n)
SubClass2
SuperClass()
SubClass2(int n):200

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园失物招领系统管理系统按照操作主体分为管理员和用户。管理员的功能包括字典管理、论坛管理、公告信息管理、失物招领管理、失物认领管理、寻物启示管理、寻物认领管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 校园失物招领系统管理系统可以提高校园失物招领系统信息管理问题的解决效率,优化校园失物招领系统信息处理流程,保证校园失物招领系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 ,管理员权限操作的功能包括管理公告,管理校园失物招领系统信息,包括失物招领管理,培训管理,寻物启事管理,薪资管理等,可以管理公告。 失物招领管理界面,管理员在失物招领管理界面可以对界面显示,可以对失物招领信息的失物招领状态进行查看,可以添加新的失物招领信息等。寻物启事管理界面,管理员在寻物启事管理界面查看寻物启事种类信息,寻物启事描述信息,新增寻物启事信息等。公告管理界面,管理员在公告管理界面新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值