欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-24 13:28:42
...
最近一直在温习基础,发现很多以前常会忽略的东西,这里跟大家一起分享一下我的体会,也希望我的例子能对萌新有帮助,让你们
少走一些弯路!
代码如下:
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中继承,接口方法与方法所属对象的机制
发自内心,我觉得java的类继承、接口机制真的是灵巧且机智!