Java--重载与重写
父类(Parent): public class Parent { public String name = "parent 父类属性"; public void say(){ System.out.println("parent say被调用"+this.getClass()); } } 子类(Child): public class Child extends Parent { /** * 属性只能被隐藏,不能被覆盖 */ public String name = "child 子类属性"; public static void main(String[] args) { Child c = new Child();//普通对象 c.say(); Parent p = new Child();//向上转型 p.say(); /** * 当子类Child和父类Parent都有name属性时: * c.name = child 子类属性 * p.name = parent 父类属性 * 当子类Child没有name属性,父类有该属性时: * c.name = parent 父类属性 * p.name = parent 父类属性 */ System.out.println("c.name = " + c.name);//c.name = child System.out.println("p.name = " + p.name);//p.name = parent } /** * 重写父类方法 */ public void say(){//子类方法一 System.out.println("child say被调用"+this.getClass()); } /** * 重载--子类方法一 * 当子类方法一不存在时, 子类方法二看起来就象是程序员有意覆盖 say() 的功能, * 但对方法的类型定义却稍微有些不确切。 * 然而,编译器此时假定的是程序员有意进行“过载” ,而非“覆盖”。 */ public void say(int s){//子类方法二 System.out.println("child say被调用"+this.getClass()); } /*** * 方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成, * 当定义两种或多种具有相同名称的方法时,就称作重载。 * 即重载时相同名称成员的参数列表是不相同的(参数顺序和类型)。 * 以下say2三个方法是重载的体现 */ public void say2(){//子类方法三 System.out.println("child say2被调用"); } public void say2(int a){//子类方法四 System.out.println("child say2被调用"); } public int say2(String a){//子类方法五 System.out.println("child say2被调用"); return 0; } }
继承:
1.如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract (抽象)。否则,编译器会向我们报告一条出错消息。(注:是编译错误非运行错误)
2.如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。(即普通类继承抽象类时必须实现抽象类的抽象方法;如果不这样做,则衍生类也会是抽象的,而且编译器会强迫我们用 abstract 关键字标志那个类的“抽象”本质。)
3.即使不包括任何 abstract 方法,亦可将一个类声明成“抽象类”。