继承的本质是对某一批类的抽象
Java中类只有单继承,没有多继承
继承关系的两个类为子类(派生类)和父类(基类),子类继承父类,使用关键字extends表示,extends的意思为扩展,子类是父类的扩展
继承是类和类之间的一种关系,还有依赖、组合、聚合等
1.Object类
创建一个父类
//父类,基类
//在Java中,所有的类都默认直接或间接继承object
//父类,基类
public class Person {
//public 共有的
//protected 受保护的
//default 默认
//private 私有
public int money = 10_0000_0000;
//alt + insert
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public void say(){
System.out.println("say");
}
}
创建一个子类Student
//派生类,子类
//子类继承父类,就会拥有父类的全部方法
public class Student extends Person{
}
创建一个子类Teacher
//派生类,子类
public class Teacher extends Person{
}
创建main方法
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.say();
System.out.println(student.money);
}
}
子类继承父类,就会获得父类的所有方法。
在Person类中添加属性和方法:
public int money = 10_0000_0000;
public void say(){
System.out.println("say");
}
Student类为Person的一个子类,继承了Person类的一切方法,因此在main方法中
Student student = new Student();
student.say();
System.out.println(student.money);
便可得到结果:
私有(private)无法被继承
子类构造器默认调用了父类的无参构造
super关键字:
1.调用父类的构造器(必须要在子类构造器的第一行)
2.必须只能出现在子类的方法或构造器中
3.super和this不能同时调用构造器
与this关键字的区别:
1.代表对象不同
this:本身调用这个对象
super:代表父类对象的引用
2.前提条件
this:无继承也可以使用
super:只能在继承条件下才可以使用
3.构造器:
this(); 本类的构造
super(); 父类的构造
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.test("杨");
}
}
public void test(String name){
System.out.println(name); //传参 student.test("杨");
System.out.println(this.name); //当前类
System.out.println(super.name); //父类
}
3.重写方法
重写需要有继承关系,子类重写父类的方法。重写只针对方法,与属性无关。
1.方法名必须相同
2.参数列表必须相同(否则就是重载了)
3.修饰符:范围可以扩大但不能缩小 private —> Protected --> Default --> public
4.抛出异常:范围可以被缩小但不能扩大 ClassNotFoundException —> Exception(大)
重写:子类的方法和父类必须一致,但方法体不同
重写的原因:
子类不一定需要(或不一定满足)父类的功能
快捷键:alt + insert —> Override
静态重写:
//继承
public class A extends B{
//@Override //注解:有功能的注解
public static void test() {
System.out.println("A=>test()");
}
}
//重写都是方法的重写,与属性无关
public class B {
public static void test(){
System.out.println("B=>test()");
}
}
public class Application {
//静态方法与非静态方法区别很大
//静态方法:方法的调用只和左边:定义的数据类型有关
//非静态方法:重写 不能为private 要为public
public static void main(String[] args) {
//方法的调用只和左边:定义的数据类型有关
A a = new A();
a.test();
//父类的引用指向了子类
B b = new A();
b.test();
}
}
非静态重写:
//继承
public class A extends B{
//@Override //注解:有功能的注解
public void test() {
System.out.println("A=>test()");
}
}
//重写都是方法的重写,与属性无关
public class B {
public void test(){
System.out.println("B=>test()");
}
}
静态方法与非静态方法区别很大
静态方法:方法的调用只和左边定义的数据类型有关
//方法的调用只和左边定义的数据类型有关
A a = new A();
B b = new A();



