继承概述

什么是继承

在程序中的继承是指若一个类从另一个类派生而来,派生类自动具有了被继承类所有的特性。

被继承类称为父类,继承父类的类称为子类。继承可以使得子类具有父类的各种属性和方法

子类在继承后,也可拥有自己的一些特性

继承可分为单一继承和多重继承。


实现继承

就是创建一个类的子类

<修饰符>  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类的。