Java继承
时间:2021-04-09 13:38:03
收藏:0
阅读:0
继承
-
概念:继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
-
语法:class 子类 extends 父类 {} 子类又被称为派生类; 父类又被称为超类(Super Class)。
-
通过代码可以发现,子类(Student)并没有定义任何的操作,而在主类中所使用的全部操作都是由Person类定义的,这证明:子类即使不扩充父类,也能维持父类的操作。
//父类 public class Person { String name; public void print(){ System.out.println("打印这句话!"); } } //子类 public class Student extends Person{ } public class Application { //一个项目只有一个main方法 public static void main(String[] args) { Student student = new Student(); student.print(); } } //打印这句话!
-
在Java中,所有的类都直接或者间接继承Object
-
子类实际上是将父类定义的更加的具体化的一种手段。父类表示的范围大,而子类表示的范围小。
-
限制:
- Java之中只允许多层继承,不允许多重继承,Java存在单继承局限。
- 在一个子类继承的时候,实际上会继承父类之中的所有操作(属性、方法),但是需要注意的是,对于所有的非私有(no private)操作属于显式继承(可以直接利用对象操作),而所有的私有操作属于隐式继承(间接完成)。
- 在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法。
- 现在默认调用的是无参构造,而如果这个时候父类没有无参构造,则子类必须通过super()调用指定参数的构造方法:
-
在任何的情况下,子类都逃不出父类构造的调用,很明显,super调用父类构造,这个语法和this()很相似:super调用父类构造时,一定要放在构造方法的首行上。
public class Person {
protected String name = "父类名字";
}
public class Student extends Person{
private String name = "子类名字";
public void print(String name){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
}
public class Application {
//一个项目只有一个main方法
public static void main(String[] args) {
Student student = new Student();
student.print("张三");
}
}
//张三
子类名字
父类名字
public class Person {
protected String name = "父类名字";
public void print(){
System.out.println("父类方法");
}
}
public class Student extends Person{
private String name = "子类名字";
public void print(){
System.out.println("子类方法");
}
public void test(){
print(); //调用自己类的方法
this.print(); //调用自己类的方法
super.print(); //调用父类的方法
}
}
public class Application {
//一个项目只有一个main方法
public static void main(String[] args) {
Student student = new Student();
student.test();
}
}
//子类方法
子类方法
父类方法
public class Person {
protected String name = "父类名字";
public Person() {
System.out.println("父类无参构造器");
}
}
public class Student extends Person{
private String name = "子类名字";
public Student() {
System.out.println("子类无参构造器");
}
}
public class Application {
//一个项目只有一个main方法
public static void main(String[] args) {
Student student = new Student(); //默认调用父类构造方法
}
}
//父类无参构造器
子类无参构造器
Super注意点:
-
super 调用父类的构造方法,必须在构造方法的第一行;
-
super 必须只能出现在子类的方法或者构造方法中;
-
super 和 this 不能同时调用构造方法;
Super VS This 的区别
-
代表的对象不同
- this:本身调用这个对象
- super:代表父类对象的应用
-
提前不同:
- this:没有继承也可以使用
- super:只能在继承条件下使用
-
构造方法:
- this:本类的构造
- super:父类的构造
评论(0)