抽象类:
package practice;
/**
* Created by fangjiejie on 2016/11/21.
*/
public abstract class P32 {
//abstract int a=10;错误的,abstract只能修饰方法和类不能修饰变量
int a;
protected int b; //抽象类中可以包含普通类中任意成员
private void setB(){
System.out.println("bbbbbbbb");
}
//private abstract void setA();错误的,抽象方法不能是私有的
abstract void setA();//含有抽象方法的一定是抽象类(只是声明),
// 抽象方法不能在抽象类实现而是由继承它的类实现
abstract String hello();
}
class P320 extends P32{//抽象类一旦被继承,抽象类中的所有的抽象方法一定要被实现,
//一旦不能实现,那么该类也只能被定义为抽象类
void setA(){
a=100;
}
String hello(){
return " 你好 ~";
}
public static void main(String[] args) {
//P32 my=new P32();错误的,抽象类不能被实例化
}
}
接口:
package practice;
/**
* Created by fangjiejie on 2016/11/21.
*/
public interface P33{//接口是抽象方法和常量值的定义的集合
//接口中的变量全都是常量 ,默认public static final
int a=10;
//接口中的方法默认为public static final
void A();
}
interface P333 extends P3333,P33{//接口可以继承接口,并可以实现多继承接口
void B();
}
interface P3333 {
void C();
}
class PP33 implements P33,P333{//一个类可以实现多个接口
public void A(){//实现接口中的方法重写,权限为public
System.out.println("haha");
}
@Override
public void B(){
System.out.println("xixixi");
}
public void C(){
System.out.println("hehehe");
}
}
class PPP33 extends PP33 implements P33{//一个类可以同时继承类和实现接口,
// 继承在前实现在后
public void D(){
}
}
抽象类与接口的区别:
1.接口中的方法都是抽象的,而且是公共的,抽象类中可以有一般方法,访问作用域可以是四种修饰符,抽象方法不能是private;
2.接口中没有变量,都是常量,而抽象类中有变量和常量
3.类和接口的关系是implements是实现,而类和抽象类的关系是继承extends
4.类可以实现多个接口,但只能继承一个抽象类
5.接口可以多继承,但不能实现。
6.抽象类只能有一个父类
总结:接口只能继承接口,而且可以多继承,但不能实现接口。
类只能继承一个类,但可以实现多个接口。