java中继承,接口方法与方法所属对象的机制

最近一直在温习基础,发现很多以前常会忽略的东西,这里跟大家一起分享一下我的体会,也希望我的例子能对萌新有帮助,让你们
少走一些弯路!
代码如下:
package ioc;

/**
 * @Author:zhuo
 * @Date:2018/4/26 12:34
 */


public class Test11 {

    public static void main(String[] args) {
        Person p = new Police();
        ((Police) p).grab();// Person类的p 调用子类Police自定义的grab()方法时进行了强制类型转化

        //这里强制类型转换的原因是需要实例化抽象类Person,使p2编译时和运行时对象都是Person类型
        Person p2 = new Person() {
            @Override
            public void work() {
                System.out.println("Person->work()");
            }
        };

        // 调用父类对象p2的work()方法,因为没有调用子类的new方法,故没有多态。
        //   调用的是上面实现的抽象类的work()方法
        p2.work();

        Person p3 = new Police();
        p3.eat();   // 这里只是调用了重载方法,没有进行强制类型转换

        Person p4 = new Artist();
        // 这里调用了Artist类对象的create()方法,为接口引入,在父类中不存在,故需要强制类型转换
        ((Artist) p4).create();



        /*下面是接口的实例化测试*/
        IWorkStyle iws = new Worker();
        iws.work(); // iws接口内只有work()的方法声明,当Worker类实现接口的该方法且接口用new Worker()
                    //初始化时可以用接口的实例iws调用接口方法work(),其他的则不能,因为其不在接口
                    //IWorkStyle内,若要调用Worker的其他方法,只能强制转换为worker,如下条调用

        ((Worker) iws).eat(); //这里强制转化是因为Worker类的方法eat()没有包含在接口里
                              // 个人感觉实现类的抽象方法和实现接口是一样的,只是接口更加灵活!!!

    }



}

/*基础类*/
// 本身方法 eat , sleep
// 接口方法 work <-- IWorkStyle

interface IWorkStyle {
    void work(); // 定义了work方法
}


/* 抽象父类Person */
abstract class Person implements IWorkStyle {
    public void eat() {
        System.out.println("Person->eat()");
    }

   /* public void sleep() {
        System.out.println("Person->sleep()");
    }*/

    @Override
    public abstract void work();//接口方法  ,这是一个抽象方法



}

/* Police类实现了父类的抽象方法,并加入的新的方法grab() */
class Police extends Person {

    @Override
    public void eat() {
        System.out.println("Police->eat()");
    }

    @Override
    public void work() {
        System.out.println("Police->work()");
    }

    //Police类新增函数grab()
    public void grab() {
        System.out.println("Police->grab()");
    }

}


/* Worker类实现了父类的抽象方法*/
class Worker extends Person {

    @Override
    public void work() {
        System.out.println("Worker->work()");
    }



}

// 定义一个新接口
interface ICreation {
    void create(); // 接口的create()方法
}

/* Artist类实现了父类抽象方法,并且实现了一个全新的外部接口 */
class Artist extends Person implements ICreation {

    @Override
    public void work() {
        System.out.println("Artist->work()");
    }

    @Override
    public void create() {
        //实现了新的接口的新的方法
        System.out.println("Artist->create()");
    }
}
测试结果:
java中继承,接口方法与方法所属对象的机制_第1张图片
发自内心,我觉得java的类继承、接口机制真的是灵巧且机智!




你可能感兴趣的:(java)