Java---继承,抽象(super,override,abstract)

继承:

让类与类之间产生关系.子类可以直接使用父类中非私有成员

多各类中出现重复性内容时,把重复性的内容抽取出来,做成父类,让子类继承父类.

继承的好处:

提高了代码的复用性

提高了代码的维护性

让类与类之间产生了关系,是多态的前提

继承的弊端:

继承是侵入性的

降低了代码的灵活性

增强了代码的耦合性

继承的特点:

Java只支持单继承,不支持多继承,支持多层继承

继承的成员变量访问特点:

在子类方法中访问一个变量

子类局部范围找,子类成员范围找,父类成员范围找

注意:如果子父类中,出现了重名的成员变量,通过就近原则,会优先使用子类的

​ 如果一定要使用父类的,可以通过super关键字,进行区分.

super关键字的用法和this关键字的用法相似

this:代表本类对象的引用

super:代表父类存储空间的标识(可以理解为父类对象引用)

案例:

public class Test1 {
    
    
    public static void main(String[] args) {
    
    
        Dog d = new Dog();
        d.getName();
    }
}
class SuperAnimal{
    
    
    String name = "SuperAnimal";
    public void getName(){
    
    
        System.out.println(name);
    }
}
class Animal extends SuperAnimal{
    
    
    String name = "小花";
}
class Dog extends Animal{
    
    
    String name = "小黑";
    public void getName(){
    
    
        String name = "小黄";

        System.out.println(name);//局部变量
        System.out.println(this.name);//成员变量
        System.out.println(super.name);//父类成员变量
    }
    
}

运行结果:
小黄
小黑
小花
成员方法:

super.方法名()

方法重写:override

在继承关系下,出现相同的方法

方法重写和重载的区别:

方法重写:Override

发生在继承体系时,子类出现和父类一模一样的方法,这两个方法构成的关系叫"方法重写"

特点:子父类中,方法生命一模一样

方法重载:Overload

发生在同一个类中,出现"同名不同参"的方法,那这些方法之间就构成方法重载

方法重写注意事项:

父类中私有方法不能被重写

父类静态方法,子类必须通过静态方法重写,父类非静态方法,子类必须通过非静态方法重写

子类重写父类方法时,访问权限必须大于父类

权限修饰符:

private:私有的,出了本类,别的类都不能访问

什么都不写:只能在同一个包

protected:不同包的子类访问

public:权限最大,公共的,任何地方都可以访问

继承中成员的访问特点:

成员变量:就近原则
成员方法:就近原则

子类构造方法的访问特点

子类执行构造方法,先执行父类构造方法

子类默认执行父类的无参,如果没有无参,就不执行.

如果父类没有无参,有有参,想要执行有参

1.子类通过super,手动调用父类的带参构造方法///super(参数)

2.子类通过this调用本类的构造方法,最终还是要调用父类构造方法

public class Test {
    
    
    public static void main(String[] args) {
    
    
        Cat c1 =new Cat();
        c1.setName("加菲");
        c1.setColor("花色");

        Cat c2 = new Cat("英短","黑白");

        System.out.println(c1.getName()+c1.getColor());
        System.out.println(c2.getName()+c2.getColor());
    }
}
class Cat extends Animal{
    
    
    public Cat() {
    
    
    }

    public Cat(String name, String color) {
    
    
        super(name, color);
    }
}
class Animal {
    
    
    String name;
    String color;

    public Animal() {
    
    
    }

    public Animal(String name, String color) {
    
    
        this.name = name;
        this.color = color;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getColor() {
    
    
        return color;
    }

    public void setColor(String color) {
    
    
        this.color = color;
    }
}

抽象类(abstract):

抽象方法:将共性行为(方法)抽取到父类后,发现该方法的实现逻辑无法在弗雷中给出具体明确,该方法就可以定义为抽象方法.

抽象类:如果一个类中存在抽象方法,name该类就必须声明为抽象类.

public class TestDemo {
    
    
    public static void main(String[] args) {
    
    
        Cat c = new Cat();
        c.eat();
        
        Dog d = new Dog();
        d.eat();
    }
}
class Cat extends  Animal{
    
    
  public void eat(){
    
    
        System.out.println("猫吃鱼");
    }
}
class Dog extends  Animal{
    
    
    public void eat(){
    
    
        System.out.println("狗吃肉");
    }
}
abstract class  Animal{
    
    
    String name;
    int age;

    public void drink(){
    
    
        System.out.println("喝水");
    }
    //抽象方法特点
    //1.抽象方法没有方法体
    //2.抽象方法所在的类必须是抽象类
    //3.抽象方法的子类必须重写子类的所有抽象方法
    public abstract void eat();
}

注意事项:

1.抽象类不允许实例化(创建对象)

2.抽象类中有构造方法

3.抽象类的子类:必须要重写父类中的所有抽象方法

4.抽象类中的方法可以没有抽象方法,但是有抽象方法的类一定是抽象类

猜你喜欢

转载自blog.csdn.net/qq_42073385/article/details/108017849