4. 面向对象三大特性——继承
继承
-
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
-
extends 的意思是“扩展”,子类是父类的扩展。
-
Java中类只有单继承,没有多继承。
-
继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
-
继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用 extends 关键字表示。
-
子类和父类之间,从意义上讲应该具有 “ is a”的关系
只要子类继承了父类,也会同时继承父类中所有的方法或属性
public static void main(String[] args) {
Student student = new Student();
student.student();
Teacher teacher = new Teacher();
teacher.teacher();
}
public class Preson {
public void student(){
System.out.println("学生在学习!");
}
public void teacher(){
System.out.println("老师在给学生上课!");
}
}
//只要子类继承了父类,也会同时继承父类中所有的方法或属性
public class Teacher extends Preson{
}
public class Student extends Preson {
}
-
object类
-
super:用于调用父类的属性或方法
super注意点:
-
super调用父类的构造方法,必须在构造方法的第一个
-
super必须只能出现在子类的方法或构造方法中
-
super 和 this 不能同时调用构造方法
super 和 this 的不同:
-
代表的对象不同:
-
this:本事调用者这个对象
-
super:代表父类对象的应用
-
-
前提:
-
this:没有继承也可以使用
-
super:只能在继承条件下才能使用
-
-
构造方法:
-
this():本类的构造
-
super():父类的构造
-
public class Preson {
public String name = "zhangsan";
public Preson() {
System.out.println("Preson父类无参构造执行");
}
}
package com.demo02;
/**
* super:用于调用父类的属性或方法
*/
public class Student extends Preson {
public String name = "张三";
public Student() {
/**
* 隐藏代码,默认调用父类中的无参构造方法
* 并且必须是在方法的第一行,
* super() 和 this() 不能同时在一个方法中即调用父类构造器,又调用子类构造器
*/
super();
// this();调用自己的构造器
System.out.println("Student子类无参构造执行");
}
public void print(String name){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
}
public class Apuliction {
public static void main(String[] args) {
Student student = new Student();
student.print("zs");
}
}
-
方法重写:需要有继承关系,子类重写父类的方法!(override:重写)
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大,但不能缩小
-
抛出的异常:范围可以被缩小,不能扩大。
-
子类的方法和父类必须一致;方法体不同!
-
重写是针对非静态方法的,静态方法不是重写
-
静态方法:静态方法不是重写
public static void main(String[] args) {
/**
* 父类和子类中的方法,属于静态方法时,
* 调用的结果取决于左边的数据类型
*/
A a = new A();
a.test();
B b = new A();
b.test();
}
A=>test()
B=>test()
-------------------------------------------
public class A extends B {
public static void test(){
System.out.println("A=>test()");
}
}
------------------------------------------------
public class B {
public static void test(){
System.out.println("B=>test()");
}
}
非静态方法:重写
public static void main(String[] args) {
A a = new A();
a.test();
B b = new A();
b.test();
}
A=>test()
A=>test()
------------------------------
public class A extends B {
public void test(){
System.out.println("A=>test()");
}
}
------------------------------
public class B {
public void test(){
System.out.println("B=>test()");
}
}


浙公网安备 33010602011771号