用关键字extends来表示一个类继承了 另一个类
public class Sub extends Base1{
。。。。
}
如果Sub和Baes1类位于同一个包中:
sub继承base类中的public,protectd和默认访问级别的成员变量和成员方法。
----------------------不在同一个包中:
~~~~~~~~~~~~~~不会继承默认访问级别的成员变量和成员方法。
Java中不支持多继承。只允许一个类直接继承一个类。但是他可以有很多的间接父类。
class Base1 extends Base2{}
class Sub extends Base1{}
JAVA所有的类都继承java.lang.Object类
方法重载Overload
对于类的方法(包括从父类中继承的方法)
方法名相同--方法的参数类型、个数、顺序至少有一项不相同。就叫做方法的重载。
另外俩个必须满足的条件,1-方法的返回类型可以不同 2-方法的修饰符可以不同。
在关键字abstract方面,不是抽象类,不能包含抽象方法。
方法的覆盖Override
为了提高代码的可重用性,父类的方法应适用于大多数的子类的实现,这样就可以避免子类中重复定义相似方法,
但是一小部分的子类在这个方法与父类实现方式不一样,这个类就必须重新定义。
(1)子类的方法名,参数签名和返回类型必须一致。
(2)子类方法不能缩小父类方法的访问权限。如,父类public,子类就不能是private
(3)子类不能抛出比父类更多的异常。
要么子类方法抛出的异常和父类的相同,要么多抛出的异常是父类方法抛出的异常的子类。
(4)方法覆盖只能在子类和父类间,同一个类中只能重载
(5)父类的静态方法不能被子类覆盖为非静态方法。
父类的非静态方法不能被子类覆盖为静态方法。
父类的私有方法不能被子类覆盖。
(6)子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法。
隐藏父类的静态方法和子类覆盖父类的实例方法:
Java虚拟机讲静态方法和所属的类绑定,而把实例方法和所属的实例绑定。
(7)父类的私有方法不能被子类覆盖 。
(8)父类的抽象方法被子类覆盖 有两种途径:
一、子类实现父类的抽象方法
二、子类重新声明父类的抽象方法。
public abstract class base{
abstract void method1(){};
abstract void method2(){};
}
public abstract class sub extends base()
{
public void method1(){}//实现method1方法, 并扩大访问权限。
public abstract void method2(){};//重新声明method2方法,仅仅扩大访问权限,不 实现。
}
(9)父类的非抽象方法可以被覆盖为抽象方法.
总结的不完善,希望大家能多给点意见。