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
父类的成员变量和方法为private使用super访问编译出错在类的构造方法中,通过super语句调用这个类的父类的构造方法在子类种访问父类的被屏蔽的方法和属性只能在构造方法或实例方法内使用super关键字,而在静态方法和静态代码块内不能使用super
版权声明:本文为博主原创文章,未经博主允许不得转载。
java学习之继承、重载、重写(覆盖)
原文:http://blog.csdn.net/fk5431/article/details/48035513