标签:
1.抽象类
Java可以定义一些不含方法体的方法,它的方法体交给该类的子类根据自己的情况去实现,这样的方法就是抽象方法,包含抽象方法的类叫抽象类。一个抽象类中可以有一个或者多个抽象方法。
抽象防范必须用abstract修饰符来定义,任何带有抽象方法的类都必须声明为抽象类。
(1)抽象类定义规则
a.抽象类必须用abstract关键字来修饰,抽象方法也必须用abstract来修饰;
b.抽象类不能被实例化,也就是不能用new关键字去产生对象;
c.抽象方法只需声明,而不需要实现;
d.含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是一个抽象类。
2.抽象方法的写法
abstract 返回值类型 抽象方法(参数列表);
3.抽象类和抽象方法的例子
1 abstract class Abs{ 2 abstract int aa(int x,int y); 3 }
注意:含有抽象方法的类肯定是抽象类,抽象类中的某个抽象方法不一定是抽象的。
1.接口
如果一个抽象类中的所有方法都是抽象的,就可以将这个类用另外一种方式来定义,也就是接口定义。接口是抽象方法和常量值的定义的集合,从本质上来讲,接口是一种特殊的抽象类,中抽象类只包含常量和方法的定义,而没有变量和方法的实现。
2.接口定义的例子
1 interface Runner{ 2 int ID = 1; 3 void run(); 4 }
在接口Runner的定义中,及时没有显式地将其中的成员用public关键字标识,但是这些成员都是public访问类型的。接口里的变量默认是用public static final 标识的,所以,接口中定义的就是全局变量。
我们可以定义一个新的接口,用extends关键字去继承一个已有的接口;也可以定义一个类,用implements关键字去实现一个接口中的所有方法;还可以去定义一个抽象类,用implements关键字去实现一个接口中定义的部分方法。
1 //定义一个接口 2 interface Runner{ 3 int ID = 1; 4 void run(); 5 } 6 //可以定义一个新的接口,用extends关键字去继承一个已有的接口 7 interface Animal extends Runner{ 8 void breathe(); 9 } 10 //可以定义一个类,用implements关键字去实现一个接口中的所有方法 11 class Fish implements Animal{ 12 public void run() { 13 System.out.println("fish is swimming"); 14 } 15 16 public void breathe() { 17 System.out.println("fish is bubbling"); 18 } 19 } 20 21 //可以去定义一个抽象类,用implements关键字去实现一个接口中定义的部分方法。 22 abstract class LandAnimal implements Animal{ 23 public void breathe(){ 24 System.out.println("LandAnimal is breathing"); 25 } 26 }
在Java中,设计接口的目的就是为了让类不必受限于单一继承的关系,而可以灵活地同时继承一些共有的特性,从而达到多重继承的目的,并且避免了C++中多重继承的复杂关系所产生的问题。多重继承的危险性在于一个类可能继承了同一个方法的不同实现,对接口来讲不会发生这种情况,因为接口没有任何实现。
一个类可以在继承一个父类的同时,实现一个或多个接口,extends关键字必须位于implements关键字之前。如下:
1 class Student extends Person implements Runner{ 2 public Student(int age) { 3 super(age); 4 } 5 6 public void run() { 7 System.out.println("the student is running"); 8 } 9 }
一个类实现多个接口的例子:
1 class Bird implements Runner,Flyer{ 2 public void run() { 3 System.out.println("the bird id running"); 4 } 5 public void fly() { 6 System.out.println("the bird is flying"); 7 } 8 }
下面是接口中定义常量的实例:
1 public class TestDebug11 { 2 public static void main(String[] args) { 3 Fish fish = new Fish(); 4 int j = 0; 5 j = Runner.ID;//格式:类.成员变量 6 j = fish.ID; //对象名.静态成员 7 } 8 }
3.小结:
a.实现一个接口就是要实现该接口的所有方法(抽象类除外);
b.接口中的方法都是抽象方法;
c.多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口。
标签:
原文地址:http://www.cnblogs.com/zicheng789/p/4657332.html