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 方法,亦可将一个类声明成“抽象类”。

 

posted @ 2015-03-30 14:28  High阔天空  阅读(199)  评论(0编辑  收藏  举报