最近一直在温习基础,发现很多以前常会忽略的东西,这里跟大家一起分享一下我的体会,也希望我的例子能对萌新有帮助,让你们
少走一些弯路!
代码如下:
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的类继承、接口机制真的是灵巧且机智!