继承
-
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
-
extends的意思是"扩展”。子类是父类的扩展。
-
JAVA中类只有单继承,没有多继承! 一个儿子只有一个父亲,但是一个父亲可以有多个儿子
继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。 -
继承关系的俩个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。
-
子类和父类之间,从意义上讲应该具有"is a"的关系. Ctrl + H 查看继承关系
-
object类
-
super - this
-
方法重写:重点------>多态
supler注意点:
- super调用父类的构造方法,必须在构造方法的第一一个
- super必须只能出现在子类的方法或者构造方法中!
- super和this不能同时调用构造方法!
Vs this:
代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的引用
前提
this:没哟继承也可以使用
super:只能在继承条件才可以使用
构造方法
this() ; 本类的构造
super():父类的构造!
object类
案例:继承 Person父类
package oop.demo05;
//在java中 所有的类 都直接或者间接默认继承object
//Person 人 父类
public class Person /*extends Object*/ {
//修饰符 public 公共的 protected 受保护的 default 不写就是默认的 private 私有的
// 优先级 左大右小
//子类继承父类 public 公共的 一般属性才是 private 私有的
private int money =10_0000_0000; //私有的 子类无法调用 但是可以用专门的get、set方法调用
public void say(){
System.out.println("说了一句话");
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
案例:Student子类 继承 Person父类
package oop.demo05;
// 学生 is 人 子类、派生类
//子类继承了父类,就会拥有父类的全部方法!
public class Student extends Person{
}
案例:Teacher子类 继承 Person父类
package oop.demo05;
public class Teacher extends Person {
}
案例:Application类 调用 Student子类 继承 Person父类 的方法
package oop;
import oop.demo05.Student;
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.say();//调用Person父类的say()方法 say()修饰符是公共的
//当Person父类的money修饰符为公共的 时候就可以这样直接调用
// System.out.println(student.money);
//当Person父类的money修饰符为私有的 当子类想要获取父类的money的时候 就会需要在Person父类里加get、set方法
System.out.println(student.getMoney());
}
}
super:父 - this:当前
案例:Person父类
package oop.demo05;
//在java中 所有的类 都直接或者间接默认继承object
//Person 人 父类
public class Person /*extends Object*/ {
//调取对象先走无参构造器
public Person() {
System.out.println("Person无参执行了");
}
//修饰符:受保护的
protected String name = "beibei";
//如果改成private 私有的 子类就无法调用 print 需要加上get/set方法才行
// public void print(){
public void print(){
System.out.println("Person");
}
}
案例:Student子类 调取 Person父类 super 和 this 区别
package oop.demo05;
// 学生 is 人 子类、派生类
//子类继承了父类,就会拥有父类的全部方法!
public class Student extends Person{
//子类的无参构造
public Student() {
/*
隐藏代码;调用父类的无参构造
super(); //调用父类的构造器,必须要在子类的构造器的第一行
*/
System.out.println("Student无参执行了");
}
private String name = "qiabeibei";
public void print(){
System.out.println("Student");
}
public void test1() {//这个name是形式参数
print();//调用的是当前这个类的print 但有的时候直接 print(); 搞不清到底调用的是哪个
this.print();//调用当前类的方print方法
super.print();//调用父类的 print方法
}
//只要写了有参构造 无参构造就没了 父类和子类根本无法写无参构造 因为父类没法写 子类也没法写 子类没法写就直接报错 代码再检查的时候就通过不了 所以要写的话 必须要有个无参
//
public void test(String name){//这个name是形式参数
System.out.println(name);//恰北北 这个name当前这个传递的参数
System.out.println(this.name);//qiabeibei 这个name是 private String name = "恰北北";
System.out.println(super.name);//beibei 子类访问父类的name
}
}
案例:Application类 验证 Student子类 调取 Person父类 super 和 this 区别
package oop;
import oop.demo05.Student;
public class Application {
public static void main(String[] args) {
Student student =new Student();
//student.test("恰北北"); //方法属性值
//student.test1();//Person 调用方法
//父类无参构造先执行 再执行子类的无参构造
}
}