/*
抽象类和抽象方法
1.如果一个类中有抽象的方法,那么这个类就是抽象类,必须在类名前加上"abstract"
2.不可用抽象类产生行何实例方法
3.抽象方法只需声明,不需实现
4.含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是抽象类
*/
/*
接口interface
如果一个抽象类中的所有方法都是抽象的,我们就可以将这个类用另外一种方式来定义,也就是接口定义.接口是抽象方法和常量值的定义的集合,从本质上来讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
1.接口中的成员变量都是public访问类型的,接口里的变量默认是用public static final标识的
2.可定义一个新的接口用extends关键字去继承一个已有的接口
3.也可以定义一个类用implements关键字去实现一个接口的所有方法,还可以去定义一个抽象类用implements关键字去实现一个接口中定义的部分方法.
4.一个类可以继承一个父类的同时,实现一个或多个接口,extends关键字必须位于implemnets关键字之前
*/
interface Runner
{
int ID=1;
void run();
}
interface Animal extends Runner
{
void breathe();
}
class Fish implements Animal
{
public void run()
{
System.out.println("fish is swimening");
}
public void breathe()
{
System.out.println("fish is bubbling");
}
public static void main(String[] args)
{
Fish f=new Fish();
int J=0;
J=Runner.ID;
J=f.ID;
J=Fish.ID;
//f.ID=2;//无法为最终变量 ID 指定值
}
}
abstract class LandAnimal implements Animal// abstract LandAnimal 不是抽象的,并且未覆盖 Runner 中的抽象方法 run()
{
public void breathe(){};
}
interface Flyer
{
void fly();
}
class Bird implements Runner,Flyer
{
public void run(){}
public void fly(){}
}
class Student extends Person implements Runner//Person.class
{
public void run(){}
}
interface A
{
int ID=1;
int aa(int x,int y);//直接用分号结束方法的定义,证明aa是一个抽象的方法
void bb();
/*public static void main(String[] args)
{
A a=new A();//错误: A 是抽象的;无法对其进行实例化
}*/
}
/*class B extends A
{
//B 不是抽象的,并且未覆盖 A 中的抽象方法 aa(int,int)
int aa(int x,int y){return 1;}
}*/