JAVA中的继承与多态

1.继承

当我们创建类时,有一些类会存在重复的成员变量或方法,此时为了减少重复代码的编写,我们可以使用继承。被继承的类称为父类,去继承的类称为子类,使用extends关键字进行。

public class a {
    int a = 10;
    int b = 20;
}

public class b extends a {
    int c = 2;
}

当子类继承父类之后,可以通过实例化子类,直接使用父类里的成员变量和成员方法。 

1.1.super的使用

当子类与父类存在相同的成员变量时,优先使用子类的成员变量,若想使用父类的成员变量,需要使用super关键字。

public class a {
    int a = 10;
    int b = 20;
}

public class b extends a {
    int c = 2;
    int a = 1;
    System.out.println(super.a);
}

需要注意的是,当父类存在构造方法时,我们使用子类时,要帮助父类使用构造方法,此时,需要使用super()关键字。 

public class a {
    int a = 10;
    int b = 20;
    public a() {
        super(2);
        this.a = 2;
        this.b = 4;
    }
}

public class b extends a {
    int c = 2;
    public b(int c) {
        this.c = c;
    }
    System.out.println(super.a);
}

与之前我们写的普通类的构造方法一样,当我们不写构造方法时,编译器会为我们提供一个默认的构造方法存在于子类之中。

public c() {
    super();
}

super()与this()一样,需要存在于构造方法的第一行,因此,当我们使用super()时,就不能再使用this()了。

1.2.代码的执行顺序

与普通的类一样,父类和子类中也会存在静态代码块,实例代码块,构造方法。而它们的执行顺序是先使用父类的静态代码块,再使用子类的静态代码块,然后使用父类的实例代码块和构造方法,最后使用子类的实例代码块和构造方法。

1.3.JAVA中继承的特性

JAVA只支持单继承,不支持多继承。

1.4.final的使用

当我们想定义一个常量时,可以使用final关键字来修饰变量。

final int a = 10;

而当我们定义一个类不想它被继承时,也可以使用final来修饰它。

public final class Dog {
}

2.多态 

多态通俗来说就是多种状态,即完成同一个行为,不同的对象完成该行为的状态不同。而实现多态需要我们完成向上转型和方法的重写。

2.1.向上转型 

当类与类之间存在继承时,向上转型和向下转型也就由此产生了。例如,当我们实例化父类对象时,引用了子类时,就完成了向上转型。而将这一步骤往反方向进行,便执行了向下转型。完成向上转型有三种方法,分别为直接赋值,方法的传参,返回值。

直接赋值

Animal animal = new Dog();

方法的传参 

public static void func(Animal animal) {
    
}
Dog dog = new Dog();
func(dog);

返回值 

public static Animal func() {
    Dog dog = new Dog();
    return dog;
}
Animal animal = func();

需要注意的是,向上转型之后,实例化的对象只能调用父类的方法,不能调用子类特有的方法。

2.2.重写 

当子类和父类的方法,达成方法名相同,参数列表相同,返回值相同这三个条件时,就构成了重写。

2.3.动态绑定

 当运行代码的时候,通过父类引用,调用了父类和子类重写的那个方法,结果实际调用了子类的方法,此时,我们把这个情况叫做动态绑定。由于子类通常是有多个的,从某种意义上来说,我们通过动态绑定实现了父类的多种形态。

2.4.重写的注意事项 

1.被重写的方法不能是一个静态方法。

2.被final修饰的方法,是不能被重写的。

3.如果子类重写父类的方法,子类的权限要大于等于父类的权限。

4.被private修饰的方法是不能被重写的。

3.其他

向下转型是要进行强制类型转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值