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的类继承、接口机制真的是灵巧且机智!
上一篇: 打造电商运营团队 构建网销竞争核心
下一篇: Linux中的内核链表实例详解
推荐阅读
-
Java中成员变量与局部变量的区别、对象类型作为方法的参数和方法的返回值
-
荐 浅谈Java中类和对象的初始化、实例化以及方法重载的底层机制
-
对继承与多态、成员变量的隐藏和方法重写、super关键字、final关键字、对象的上转型对象、抽象类的学习理解(java)
-
Java中成员变量与局部变量的区别、对象类型作为方法的参数和方法的返回值
-
java中继承,接口方法与方法所属对象的机制
-
荐 浅谈Java中类和对象的初始化、实例化以及方法重载的底层机制
-
浅谈java中的对象、类、与方法的重载
-
由JavaScript中call()方法引发的对面向对象继承机制call的思考_javascript技巧
-
浅谈java中的对象、类、与方法的重载
-
php面向对象中的继承,多态,接口,抽象类,抽象方法实例教程