继承概述
什么是继承
在程序中的继承是指若一个类从另一个类派生而来,派生类自动具有了被继承类所有的特性。
被继承类称为父类,继承父类的类称为子类。继承可以使得子类具有父类的各种属性和方法
子类在继承后,也可拥有自己的一些特性
继承可分为单一继承和多重继承。
实现继承
就是创建一个类的子类
<修饰符> class <子类名> extends <父类名>{//实现代码}
在Java中,一个类只能有一个父类,子类无法继承父类中使用private修饰的类成员
package Extends;
public class MinCar extends Car {
public static void main(String[] args) {
MinCar car = new MinCar();
System.out.println("父类车颜色是:" + car.color);
car.SetColor("blue");
System.out.println("子类车颜色是:" + car.color);
}
}
class Car {
String color = "red";
public void SetColor(String color) {
this.color = color;
}
}
继承关系
单一继承关系,一个类只继承一个直接父类
多重继承关系,可以通过实现接口的方法来达到多重继承的目的
抽象类
其中只包含有对方法的声明而没有具体的实现
即,抽象类中的方法需要声明方法的名称,但不用指明方法体。
抽象类不能被实例化,只能被继承扩展。
abstract class ClassName{
abstract ReturnType abstractMethodName(param list); }//abstractMethodName表示抽象方法的方法名,ReturnType表示抽象方法的返回类型
package Extends;
public class SubClass extends AbstactClass {
public void speak() {
System.out.println("我请大家去吃饭");
}
public static void main(String[] args) {
SubClass sb = new SubClass();
sb.speak();
sb.eat();
}
}
abstract class AbstactClass {
public void eat() {
System.out.println("我们一起去吃饭");
}
public abstract void speak();
}
动态绑定:
弄清调用对象方法的执行过程。下面是调用过程的详细描述:
1)编译器查看对象的声明类型和方法名。至此,编译器已获得所有可能被调用的候选方法
2)接下来,编译器将查看调用方法时提供的参数类型。至此,编译器已获得所需要调用的方法的名字和参数类型
3)如果是prinvate方法、static方法、final方法或者构造器,那么编译器将可以准确的知道应该调用那个方法。称这种调用方式为静态绑定
4)当程序运行时,并且采用动态绑定调用方法时,虚拟机一定调用与x所引用对象的实际类型最为合适的那个类的方法
阻止继承:final类和方法
如果将一个类声明为final,只有其中的方法自动地成为final,而不包括域。
使用关键字final
修饰成员变量,这个成员变量就变成一个常量
修饰一个方法,这个方法就不能被重写
修饰一个类,这个类不能被继承
常量
final修饰一个变量,这个变量就会变成一个常量,也就是该常量只能赋值一次,可以不在声明它的那一行赋值,但需在构造函数完成之前保证这个变量有一个值
如果定义为final的变量是静态变量,那它的赋值最晚不得迟于最后一个静态语句块的完成
方法
final修饰一个方法,这个方法就不能被重写
类
final修饰类,该类不能被继承。只有当该类中的所有方法都不需要重写时,才能将该类定义为final类
Object类
在Java中,所有类的祖先都是Object类。如果一个类没有继承任何类,那么它默认是继承Object类的。