java中使用extends关键字完成继承,和C++中的继承不同之处在于java只支持单继承,不支持多重继承。
继承让我们的代码编码变得简单,维护也变得简单,扩展变得容易。我们在继承的时候不能继承构造方法,一个类得到构造方法只有两种方法,一种是自己定义构造方法,一种是使用JVM分配的缺省构造方法。
当方法名称相同,但是参数不一样的时候,这就是方法的重载:
- 方法的重载返回值类型可以不一样
- 方法的修饰符也可以不一样
- main方法也可以被重载
方法重写:如果在子类中定义一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法。
- 子类的方法名称返回类型及参数签名 必须与父类的一致
- 子类方法不能缩小父类方法的访问权限
- 子类方法不能抛出比父类方法更多的异常
- 方法覆盖只存在于子类和父类之间,同一个类中只能重载
- 父类的静态方法不能被子类覆盖为非静态方法
- 子类可以定义于父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法(满足覆盖约束),
- 而且Java虚拟机把静态方法和所属的类绑定,而把实例方法和所属的实例绑定。
- 父类的非静态方法不能被子类覆盖为静态方法
- 父类的私有方法不能被子类覆盖
- 父类的抽象方法可以被子类通过两种途径覆盖(即实现和覆盖)
- 父类的非抽象方法可以被覆盖为抽象方法
package www.fengkai.jicheng; class A{ public int a; public int b; public A(){ a = 1; b = 2; } public void tell() { System.out.println("a"); } public void prin() { System.out.println(a + " " + b); } } class B extends A{ public B(){ a = 2; b = 3; } public void tell() { // super.tell(); System.out.println("b"); } } public class Test01 { public static void main(String[] args) { // TODO Auto-generated method stub B b = new B(); b.tell(); b.prin(); } }
定义两个类A和B,B类继承于A类,拥有A类中定义的变量和方法,而B类中的tell()方法就是对A类中的tell()方法的重写;
super关键字可以强行调用父类的方法执行,上述代码中,不注释super.tell()的话就会输出A类中的tell和B 类中的tell
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-16 08:33:12