Java继承入门全部知识归纳总结

关键点:面向对象的编程允许你从已经存在的类中定义新的类,这称为继承。

java继承

父类和子类

概要介绍:继承使得你可以定义一个通用的类(即父类),之后扩充该类为一个更加特定的类(即子类) 。

子类从它的父类中继承可访问的数据域和方法 , 还可以添加新数据域和新方法。

继承使用关键字 extends 声明:

subclass extends superclass;

如下图:
在这里插入图片描述
注意:

  1. 传统的理解不同,子类并不是父类的一个子集。实际上,一个子类通常比它的父类包含更多的信息和方法。
  2. 某些程序设计语言是允许从几个类派生出一个子类的。这种能力称为多重继承 ( multiple inheritance) 。 但是在Java 中是不允许多重继承的。 一个 Java 类只可能直接 继承自一个父类。 这种限制称为单一继承( single inheritance) 。 如果使用 extends 关 键字来定义一个子类, 它只允许有一个父类。 但是, 多重继承是可以通过接口来实现的,

super关键字

关键点:关键字 super 指代父类,可以用于调用父类中的普通方法和构造方法。

1.调用父类的构造方法

**父类的构造方法不会被子类继承。**所以它们只能使用关键字 super 从子类的构造方法中调用

调用父类构造方法的语法是:
super ()或者super (parameters)

  • 语句 super() 调用父类的无参构造方法,
  • 而语句 super(paraguments) 调用与参数匹配的父类的构造方法

注意点:

  1. 显示调用父类构造方法就必须使用关键字super, 而且这个调用必须是构造方法的第一条语句。在子类中调用父类构造方法的名字会引起一个语法错误。
  2. 隐式(默认)调用父类的构造方法(无父类构造方法的显示调用时,编译器自动将super()作为构造方法的第一条语句),调用的是父类的无参构造函数;所以一般情况下,最好能为每个类提供一个无参构造方法,以便于对该类进行扩 展,同时避免错误。

2.构造函数链

  • 在任何情况下,构造一个类的实例时,将会调用沿着继承链的所有父类的构造方法。
  • 当构造一个子类的对象时,子类构造方法会在完成自己的任务之前,首先调用它的父类的构造方法。如果父类继承自其他类,那么父类构造方法又会在完成自己的任务之前,调用它自己的父类的构造方法。这个过程持续到沿着这个继承体系结构的最后一个构造方法被调用为止,这就是构造方法链(constructor chaining)。

3.调用父类的方法

关键字 super不仅可以引用父类的构造方法,也可以引用父类的方法。
所用语法为:

super.方法名(参数)

方法重写

1.何为重写

  • 重写:子类从父类中继承方法。 有时,子类需要修改父类中定义的方法的实现,这称作方法重写

  • 重写一个方法:需要在子类中使用和父类一样的签名(方法名称和参数列表)以及一样的返回值类型来对该方法进行定义。 总之除了访问修饰符其他都一样。

注意:

  1. 仅当实例方法是可访问时,它才能被覆盖。
    因为私有方法在它的类本身以外是不能 访问的,所以它不能被覆盖。如果子类中定义的方法在父类中是私有的,那么这两个方法完全没有关系!
  2. 子类可以重写它的父类的 protected 方法,并把它的可见性改为 public。但是,子类不能削弱父类中定义的方法的可访问性。例如:如果一个方法在父类中定义为 public, 在子类中也必须定义为 public。
  3. 关于静态方法的继承问题
    与实例方法一样,静态方法也能被继承。 但是, 静态方法不能被覆盖。 如果父类中 定义的静态方法在子类中被重新定义, 那么在父类中定义的静态方法将被隐藏。可以使用语法: 父类名 .静态方法名() 调用隐藏的静态方法。
  4. 为了避免错误,可以使用一个特殊的Java语法,称为重写标注, 在子类的方法前面放一个@Override。例如:
public class Ci rcleF romSi mpl eGeometri cObject
extends SimpleGeometri cObject {
    
    
// Other methods are omitted
@Override
public String toString() {
    
    
return super . toStringO) + "\nradius is " + radius;
}
}

该标注表示被标注的方法必须重写父类的一个方法。如果具有该标注的方法没有重写父 类的方法,编译器将报告一个错误。

2.方法重写与重载的区别

  • 重载意味着使用同样的名字但是不同的参数列表来定义多个方法。
  • 重写意味着在子类中提供一个对方法的新的实现。

注意:

  1. 方法重写发生在通过继承而相关的不同类中;
    方法重载可以发生在同一个类中, 也可以发生在由于继承而相关的不同类中。
    2.方法重写具有同样的签名和返回值类型;方法重载具有同样的名字,但是不同的参数列表。

继承的一个应用——toString()方法

Java中的所有类都继承自java.lang.Object类。 如果在定义一个类时没有指定继承性,那么这个类的父类就被默认为是Object。

熟悉Object类提供的方法是非常重要的,这样就可以在自己的类中使用它们。 下面介绍Object类中的一个常用的toString()方法。
toString()方法的签名是: public String toString()
toString()的功能是:返回一个描述该对象的字符串

默认情况下,也就是在Object类中,toString()返回一 个由该对象所属的类名、at符号(@)以及该对象十六进制形式的内存地址组成的字符。
例如:在这里插入图片描述
这个信息不是很有用,。通常,应该重写这个toString方法,这样,它可以返回一个代表该对象的描述性字 符串。例如,Object类中的toString方法在GeometricObject类中重写,如下所示:

pub1ic String toString() {
    
    
return "created on”+ dateCreated + "\ncolor:+ color +
and filled: " + filled;
}

注 意:也可以传递一个对象来调用System.out.println(object)或 者System.out. print(object)。这等价于调用System.out.println(object.toString())或 者System, out.print (object -toString())。因此可以使用System.out.println(loan)来 替 换 System.out.println(loan.toString());

友情链接—纯干货
Java面向对象,这些你一定想再来复习复习:

  1. Java接口入门全部知识总结
  2. Java多态基础知识完整的归纳总结
  3. Java抽象类和抽象方法归纳总结
  4. Java可见性修饰符public/private/protected的归纳总结

猜你喜欢

转载自blog.csdn.net/qq_45768060/article/details/105856236