java基础之抽象类,接口

用于个人知识梳理
**抽象类:**抽象方法可以实例化,可以拥有抽象方法,也可以没有,可以有静态方法,也可以有非静态方法,和非抽象类唯一区别是如果在当前类实例化,需要借助匿名内部类,这个匿名内部类是他的子类等同于接口的实现类.只能单继承
代码演示
``public abstract class AbstractDemo {
private String name;

{//如果这个类被实例化时,会执行这个代码
System.out.println("------------------");
}
static {//如果这个类的方法被调用时,会执行这里的代码
System.out.println(“这个类用来给自己梳理知识!”);
}
public static void main(String[] args) {
//抽象类可以实例化,就是得重写里面的抽象方法
AbstractDemo a= new AbstractDemo() {

@Override
public void drink() {
	// TODO Auto-generated method stub
	System.out.println("喝水");
}

@Override
public void die() {
	// TODO Auto-generated method stub
	System.out.println("啪,你死了");
}

};
/*编译错误
AbstractDemo b= new AbstractDemo();
*/
a.check();
a.drink();
a.die();
}
public abstract void drink();//抽象类中的抽象方法
public abstract void die();
public void check() {//抽象类里的非静态方法
System.out.println(this.name+“让我康康你发育正不正常”);
}
public static void address() {//抽象类中的静态方法
System.out.println(“他住在下北泽”);
}

/*
*默认方法仅用于接口,编译错误
default void check() {

}*/

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}
对比

public abstract class AD2 {
private String name;
{//如果这个类被实例化时,会执行这个代码
System.out.println("------------------");
}
static {//如果这个类的方法被调用时,会执行这里的代码
System.out.println(“这个类用来给自己梳理知识!”);
}
public static void main(String[] args) {
//抽象类可以实例化,就是得重写里面的抽象方法
AD2 a= new AD2() {

};
a.check();

}

public void check() {//抽象类里的非静态方法
System.out.println(this.name+“让我康康你发育正不正常”);
}
public static void address() {//抽象类中的静态方法
System.out.println(“他住在下北泽”);
}

/*
*默认方法仅用于接口,编译错误
default void check() {

}*/
}

接口:
接口中可以多继承,然后实现类需要实现所有抽象方法,接口中所有成员变量都是静态变量,接口中只能有静态方法,抽象方法,默认方法,静态方法通过类名来调用,默认方法要通过接口的实现对象去调.虽然在接口中可以通过匿名内部类直接创建接口的实现对象.
代码演示
``public interface Pork {
int S_A =17;
int S_D = 3;

public static void main(String[] args) {
Pork p = new Pork() {

@Override
public void playPork() {
	// TODO Auto-generated method stub
	System.out.println("快乐斗地主");
}

};
p.square(“卢本伟”);
Pork.miao();
Pork.standUp();
}
void playPork();//抽象方法
static void miao() {//静态方法
System.out.println(“大家都是十七张牌,你还能秒我”);
}
default void square(String name) {//默认方法
System.out.println(“从现在开始起这里叫”+name+“广场!”);
}
static void standUp() {
System.out.println(“全体起立!所有人给我站起来!”);
}

}
编译不报错,用eclipse运行时可以选择运行两个类,运行子类,子类没有main方法,当然不行,但父类就没有问题
错误: 在类 test.Pork$1 中找不到 main 方法, 请将 main 方法定义为:
public static void main(String[] args)
否则 JavaFX 应用程序类必须扩展javafx.application.Application
;
实现类中当然没有问题,lambda表达式应用于函数式接口,就是里面只有一个抽象方法的接口,简略代码.
总结,抽象类作为具体事物的特性抽象总结,接口而作为功能的抽象,都放在面向对象的特性中,在我现在看来,确实是体现了他能提高代码复用率的特点,更多的地方现在的我还体会不出来,如果以后的学习能让我有新的感悟,我还会继续补充.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值