Java基础:继承

1|0Java基础:继承



1|1继承

  • 本质:是对某一批类的抽象,从而实现对现实世界更好的建模

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

  • 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等

  • 继承关系的俩个类,一个为子类(又称派生类)一个为父类(又称基类)。子类继承父类,使用关键字extends来表示。extands 的意思是“扩展”,用于继承的关键字,在 Java 中子类是父类的扩展

  • 类的继承格式

    class 父类 { } class 子类 extends 父类 { }
  • 示例

    public class Application { public static void main(String[] args) { Student student = new Student(); student.say(); } }

    父类

    //Person 人 //父类(基类) public class Person { public void say() { System.out.println("说了一句话"); } }

    子类

    //Student 人 //子类(派生类) 子类继承父类,会拥有父类的全部方法 //子类 extends 父类 public class Student extends Person { }

    输出

    说了一句话

1|2Object类

  • 在 Java 中,所有的类,都默认直接或者间接继承Object类
//在Java中,所有的类,都默认直接或者间接继承Object类 public class Person /*extends Object*/ { }

通过IDEA的快捷键crtl+H可以得到如下图的层次结构


1|3super关键字与this关键字

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类

this关键字:指向自己的引用

  • super注意点:

    1. super 调用父类的构造方法,必须在构造方法的第一个
    2. super 必须只能出现在子类的方法或构造方法中!
    3. super 和 this 不能同时调用构造方法!
  • Vs this:

    • 代表的对象不同:
      • this:本身调用着的对象
      • super:代表父类对象的引用
    • 前提:
      • this:没有继承也可以使用
      • super:只能在继承条件下使用的条件下才可以使用
    • 构造方法:
      • this();调用本类的构造
      • super();调用父类的构造
  • 使用示例1(打印父类、子类的属性):

public class Application { public static void main(String[] args) { Student student = new Student(); student.text("狗爹"); } }

父类

public class Person { //public 公共的 //protected 受保护的 //default 不声明就是默认的 //private 私有的 //注:私有制的东西没法继承 protected String name = "Dt"; }

子类

public class Student extends Person { private String name = "Destroy"; public void text(String name) { System.out.println(name);//狗爹 System.out.println(this.name);//Destroy System.out.println(super.name);//Dt } }

输出

狗爹 Destroy Dt

  • 使用示例2(调用父类、子类的方法):
public class Application { public static void main(String[] args) { Student student = new Student(); student.text1(); } }

父类

public class Person { public void print() { System.out.println("Person"); } }

子类

public class Student extends Person { public void print() { System.out.println("Student"); } public void text1() { print();//Student this.print();//Student super.print();//Person } }

输出

Student Student Person

  • 使用示例3(父类、子类的构造器):
public class Application { public static void main(String[] args) { Student student = new Student(); } }

父类

public class Person { public Person() { System.out.println("Person无参执行了"); } }

子类

public class Student extends Person { public Student() { //super();为隐藏代码,可以不写,作用:调用了父类的无参构造 super();//调用父类的构造器,必须要在子类的第一行 System.out.println("Student的无参执行了"); } }

输出

Person无参执行了 Student的无参执行了

1|4方法的重写(Override)

  • 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变

  • 示例

    public class Application { //静态方法和非静态方法区别很大! //静态方法:不能被重写 //非静态:重写 public static void main(String[] args) { A a = new A(); a.text();//A //方法的调用只和左边,定义的数据类型有关 //父类的引用指向了子类 B b = new A();//子类重写了父类的方法 b.text();//B } }

    父类

    //重写都是方法的重写,和属性无关 public class B { public void text() { System.out.println("B->text()"); } }

    子类

    public class A extends B { //Override 重写 @Override//注释,有功能的注释 public void text() { System.out.println("A->text()"); } }

    输出

    A->text() A->text()

Note

重写:需要有继承关系,子类重写父类的方法!
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大,但不能缩小 public> protected> default> private
4.抛出的异常:范围可以被缩小但不能被扩大 ClassNotFoundException --> Exception(大)

重写,子类的方法必须要和父类一致,方法体不同!

为什么需要重写:
父类的功能,子类不一定需要,或者不一定满足!

IDEA快捷键:Fn+Alt+Insert 选中 Override


__EOF__

本文作者userName
本文链接https://www.cnblogs.com/dt746294093/p/14638675.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   D..T  阅读(80)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示