java笔记6继承

来源:互联网 发布:手机图标更换软件 编辑:程序博客网 时间:2024/06/06 21:01
1.用extends关键字来表示一个类继承了另一个类
 当子类和父类位于同一个包时:子类继承父类中public,proceted和默认访问级别的成员变量和成员方法
 当子类和父类不位于同一个时:子类继承父类中public,protected的成员变量和成员方法
2.java语言不支持多重继承,即一个类只能直接继承一个类
3.所有的java类都直接或间接地继承了java.lang.Object类,Object类是所有类的祖先
  因此加入定义一个类时,没有使用extends关键字,那么这个类直接继承Object类
4.方法重载(overload):在同一个类中
重载方法必须满足下列条件:方法名相同,方法的参数类型,个数,顺序至少有一项不同,方法的返回类型可以不同,方法的修饰符可以不相同
public void amethod(int i,String s)
public int amethod(int i,Strings)   //不可以
5.方法覆盖(Override)
如果在子类中定义的一个方法,其名称,返回类型及参数签名正好与父类中某个方法的名称,返回类型及参数签名相匹配,那么可以说子类的方法覆盖了父类的方法
子类方法不能缩小父类方法的访问权限(违反了多态性),不能抛出比父类还多的异常(违反了多态性),可以相同或者更少

***父类的静态方法不能被被子类覆盖为非静态方法,子类可以定义与父类静态方法同名的静态方法,以便在子类中隐藏父类的静态方法,注意是隐藏*******
在编译时,子类定义的静态方法也必须满足与方法覆盖类似的约束:方法的参数签名一致,返回类型一致,不能缩小父类的访问权限,不能抛出比父类更多的异常
public class Base
{
    voidmethod()
    {
       System.out.println("method of Base");
    }
    static voidstaticMethod()
    {
       System.out.println("static method of base");
    }
}
public class Sub extends Base
{
    voidmethod()
    {
       System.out.println("method of sub");
    }
    static voidstaticMethod()
    {
       System.out.println("static method of sub");
    }
    publicstatic void main(String[] args)
    {
       Base sub1 = new Sub();
       sub1.method();
       sub1.staticMethod();
       Sub sub2 = new Sub();
       sub2.method();
       sub2.staticMethod();
    }
}
结果是:method of sub
      static method of base
      method of sub
      static method of sub

父类的非静态方法不能被覆盖为静态方法
父类的私有方法不能被覆盖
父类的抽象方法可以被子类通过两种途径来实现,一种是实现父类的抽象方法,一种是子类重新声名父类的声明方法
父类的非抽象方法可以被覆盖为抽象方法
可以覆盖父类的方法然后重载多次