java继承与多态
1.定义子类格式
public class Studet3 extends Person{
}
2.在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问方式有两种
1.通过子类对象访问成员变量
等号左边是谁,就优先用谁
2.间接通过成员方法访问成员变量
该方法属于谁,就优先用谁,没有的话向上查找
3.区分子类方法中变量重名的方式
局部变量:直接访问
本类的成员变量:this.成员变量名 访问
本类的成员变量:super成员变量名 访问
4.继承中成员方法访问特点
如果父类方法和子类方法重名,创建的对象是谁,就优先用谁,如果没有则向上找
5.继承中方法的重写
概念:方法名称一样,参数列表也一样
注意事项:1.建议写注释@Override
2.子类方法的返回值必须要小于等于父类方法的返回值
3.子类方法的权限必须大于等于父类方法的权限修饰符 public>pprotect>default>private
6.继承关系中,父子类构造方法
1.子类方法构造方法有一个默认的“super”方法调用,所以先调用父类方法 后调用子类方法
2.子类构造可以通过super关键字来调用父类重载构造
3.super的父类构造调用,必须是子类构造方法的第一个语句。且只能调用父类构造一次
public Zi(){
super();//调用父类构造方法
}
public void method(){
super();//错误写法
}
7.附this关键字的用法
1.在本类的成员方法中,访问本类的成员变量
2.在本类的成员方法中,访问本类的另一个成员方法
3.在本类的构造方法中,访问本类的第一个构造方法
8.java继承的三个特点
1.java语言是单继承的,一个类的直接父类只能有唯一一个
class A extend B{} 而不是class A extend B,C{}
2.java语言可以多级继承
class B extend A{}
class C extend B{}
3.一个子类的直接父类是唯一的,但是一个父类可以拥有多个子类。
class B extend A{}
class C extend A{}
9.抽象方法和抽象类的定义格式
public abstract class Animal01 {
//这是一个抽象方法,代表吃东西,具体吃什么不确定
public abstract void eat();
}
注意事项:1.不能直接创建抽象类对象
2.必须用一个子类来继承父类
3.子类必须覆盖重写父类中所有的抽象方法
public class Cat extends Animal01{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
10.接口概念
1.接口当中的抽象方法,修饰符必须是两个固定的关键字publi abstract(可省略)
public interface Interface01 {
public abstract void method();
}
2.接口的抽象方法不能直接使用,必须有一个实现类来实现此接口
public class Shixian implements Interface01{
@Override
public void method() {
}
@Override
public void method1() {
}
@Override
public void method2() {
}
@Override
public void method3() {
}
}
3.接口中默认方法格式(默认方法可解决接口升级问题)
public default void methodde(){
System.out.println("默认方法");
};
**默认方法也可以被实现类重写
4.接口的静态方法不可以通过实现类对象来访问
接口名称.静态方法名();
5.接口的私有方法用来解决重复代码问题 Java9开始
public default void meth(){
System.out.println("方法一");
meth3();
}
public default void meth2(){
System.out.println("方法一");
meth3();
}
private void meth3(){
System.out.println("共有方法");
}
6.接口中的成员变量必须使用public static final三个关键字进行修饰
7.注意事项:a.接口没有静态代码块或者构造方法
b.一个类的直接父类是唯一的,但一个类可以同时有多个接口
c.如果实现类所实现的多个接口当中,存在重复抽象方法,那么只需要覆盖重写一次即可
d.如果实现类没有覆盖重写接口中的所有抽象方法,那么这个实现类必须是一个抽象类
e.如果实现类所实现的多个接口当中存在重复的默认方法,那么实现类一定要对重复的默认方法进行重写
f.如果直接父类中的方法和接口方法冲突,优先使用父类方法