08.接口、继承与多态

2019-08-17  本文已影响0人  Java架构师之路

public class Son extends Parent implements drawString {
    public Son(String name, String age) {
        super(name, age);
        super.doSomethingPublic();
        super.doSomethingProtected();
        /*子类中无法调用父类非private的方法和属性*/
    }

    public Son() {
        /*父类的无参数构造方法自动被调用 所以不需要super.xx()*/
    }

    /*4.方法的重写 方法名称相同 方法的实现不同*/
    @Override
    public void doSomethingPublic() {
        System.out.println("son do something public");
    }

    /*4.方法的重载 方法名相同 参数不同 个数不同 方法的实现可相同 可不同*/
    public void doSomethingPublic(Son obj) {
        System.out.println("son do something public");
    }

    /*重载参数不同 产生变长参数*/
    public int sum(int... a) {
        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i];
        }
        return sum;
    }

    @Override
    public void drawSomething() {
        System.out.println("implements interface drawSomething");
    }

    public static void main(String[] args) {
        Son son = new Son();
        son.doSomethingPublic();
        /*2.向上转型  把子类看成是父类的一个特殊对象 向下转型 不建议使用*/
        Parent p = (Parent) son;
        p.doSomethingPublic();
        Parent parent = new Parent();
        parent.doSomethingPublic();
//        Son obj = (Son)parent;
        /*3.使用instanceof判断一个对象是不是一个类的实例*/
//        if(p instanceof Son){
//            Son obj2 = (Son)parent;
//            System.out.println(obj2);
//        }
        System.out.println(son.sum(1, 2, 3, 4));
        /*5.多态 子类向上造型 和 方法的重载都是多态的表现形式*/
    }
}

class Parent extends GrandParent {
    private String name;
    private String age;

    public Parent(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public Parent() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public void doSomethingPublic() {
        System.out.println("Parent do something public");
    }

    protected void doSomethingProtected() {
        System.out.println("Parent do something protected");
    }

    private void doSomethingPrivate() {
        System.out.println("Parent do something private");
    }

    @Override
    public String toString() {
        return "Parent{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

/*6抽象类和接口 都不能被实例化 区别如下
* (1)抽象类可以有构造方法,接口中不能有构造方法。

(2)抽象类中可以有普通成员变量,接口中没有普通成员变量

(3)抽象类中可以包含静态方法,接口中不能包含静态方法
* */
abstract class GrandParent {
    public static final double PI = 3.14;

    /*抽象方法没有实现*/
    abstract void doSomethingPublic();

    /*一般方法有实现*/
    void doSomethingDeault() {
        System.out.println("GrandParent doSomethingDeault");
    }
}

/*接口不能被实例化  没有构造方法 没有方法的实现 不能定义常量*/
interface drawString {
    public double PI = 3.14;

    void drawSomething();
}

上一篇下一篇

猜你喜欢

热点阅读