继承
-
继承的本质是对某一类的抽象,从而实现对现实世界更好的建模。
public class Student extends Person //子类Student 继承了父类Person
-
extands的意思是“扩展”。子类是父类的扩展。
-
JAVA中类只有单继承(一个子类只能有一个父类,但是一个父类可以有多个子类),没有多继承!
-
继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖、组合、聚合等。
-
继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。
-
子类和父类之间,从意义上讲应该具有“is a"的关系
-
object类(默认的所有类的父类)
-
super
类似于this,this是自身的一个对象,代表对象本身,可以认为this是一个指向对象本身的指针,而super是一个指向离自己最近父类的指针。
package com.oop.Demo05; //在Java中,所有的类,都默认直接或者间接的继承Object类 //person 人 :父类 public class Person { //public //protected //default //private public Person() { System.out.println("Person无参执行了"); } private int money = 10_0000_0000; protected String name = "kuangshen"; //私有的东西无法被继承 public void print(){ System.out.println("Person"); } public void say(){ System.out.println("说了一句话"); } public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } } /* Student student = new Student(); student.say(); student.test("小红"); student.test1(); System.out.println(student.getMoney()); */
package com.oop.Demo05; //Student is person 学生是人 :派生类、子类 //子类继承了父类,就会拥有父类的全部方法! public class Student extends Person { public Student() { //父类没有无参构造,子类就无法写无参构造。 //隐藏代码:调用了父类的无参构造super(); //super();//调用父类的构造器,必须要在子类构造器的第一行 System.out.println("Student 的无参执行了"); } //Ctrl+H 显示继承关系 private String name = "xiaohong"; public void print(){ System.out.println("Student"); } public void test1(){ print(); this.print(); super.print(); } public void test(String name){ System.out.println(name); System.out.println(this.name); System.out.println(super.name); } }
-
方法重写
package com.oop.Demo05;
//重写,都是方法的重写,和属性无关
public class B {
public void text(){
System.out.println("B=>test");
}
/* public static void text(){
System.out.println("B=>test");
}*/
}
/*
//静态的方法和非静态的方法区别很大!
//静态方法:不能重写
//非静态方法:重写
public static void main(String[] args) {
//方法的调用只和定义(左边)的数据类型有关
A a = new A();
a.text();
//父类的引用指向了子类
B b = new A(); //子类重写了父类的方法
b.text();
}
*/
package com.oop.Demo05;
public class A extends B {
//Override 重写
@Override //注释:有功能的注释!
public void text() {
System.out.println("A=>text");
}
/*
//测试方法的调用
public static void text(){
System.out.println("A=>text");
}*/
}