//抽象类方法对比
abstract class demo4_1{
public abstract void run();
public abstract String name();
}
interface demo4_1{
void run();
String getName();
}
interface demo4_1{
void run();
String getName();
}
interface demo4_1chou{
void run();
String name();
}
//class实现interface需要使用implements关键字
class demo4_1_1 implements demo4_1{
private String name;
public demo4_1_1(String name){//构造方法
this.name=name;
}
@Override //继承
public void run() {//父类中的方法
System.out.println(this.name+" 1");
}
@Override
public String getName() {//父类中的字段
// TODO Auto-generated method stub
return this.name;
}
}
class demo4_1_2 implements demo4_1,demo4_1chou{
protected String name;
@Override
public void run() {}
@Override
public String getName() {
return this.name;}
@Override
public String name() {
return this.name;}
}
{/tabs-pane}
{tabs-pane label="术语"}
abstract class | interface | |
---|---|---|
继承 | 只能extends一个class | 可以implements多个interface |
字段 | 可以定义实例字段 | 不能定义实例字段 |
抽象方法 | 可以定义抽象方法 | 可以定义抽象方法 |
非抽象方法 | 可以定义非抽象方法 | 可以定义default方法 |
{/tabs-pane}
{tabs-pane label="接口继承 extends"}
//接口继承 extends
interface demo4_1_3 extends demo4_1{
void run();
String getName();
}
{/tabs-pane}
{tabs-pane label="default方法"}
default方法和抽象类的普通方法是有所不同的。因为interface没有字段,default方法无法访问字段,而抽象类的普通方法可以访问实例字段。
demo4_1 d=new demo4_1_4("我是默认方法");
d.run();
interface demo4_1{
//void run();
String getName();
default void run(){System.out.println(this.getName()+" run");}
}
class demo4_1_4 implements demo4_1{
private String name;
public demo4_1_4(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
{/tabs-pane}
本文共 425 个字数,平均阅读时长 ≈ 2分钟
评论