接口和内部类为我们提供了将接口与现实分离的更加机构化的方法。
抽象类和抽象方法
为什么要抽象?抽象类因抽象方法而生,而这些抽象方法子类都必须去实现。设计者这样设计的目的是考虑到后面子类都需要这些抽象方法但是具体实现不同,如果用abstract关键字修 饰的方法没有在子类中实现就会在编译时报错。子类也不一定要全部实现抽象父类的所以抽象方法,但如果没有全部实现那么就要 用abstract关键字修 饰该类。
用abstract修饰的类(抽象类)是不能创建对象的,如果创建的话编译器会报错,通过这一方法可以刻意的阻止即使 没有抽象方法的类不能创建对象被外部程序使用。
package S;
abstract class Instrument {
public abstract void paly(String s);
public String what() {
return "Instrument";
}
}
package S;
class Wind extends Instrument {
public void paly(String s) {
System.out.println("Wind.paly()" + s);
}
public String what() {
return "Wind";
}
public void adjust() {
}
}
package S;
class Percussion extends Instrument {
public void paly(String s) {
System.out.println("Percussion.paly()" + s);
}
public String what() {
return "Percussion";
}
public void adjust() {
}
}
package S;
public class Music2 {
public static void main(String[] args) {
Percussion p = new Percussion();
p.paly("hahah");
Wind w = new Wind();
w.paly("hahah");
}
}/*output
Percussion.paly()hahah
Wind.paly()hahah
*/
接口
接口是抽象类的极端,接口里面所有方法都是被抽象的,具体看下面的代码。抽象类不是已经够用了嘛?为啥需要接口?接口不是真正意义上的继承因为 它全部是抽象的只是确定方法名、参数列表、返回类型,其他全部靠你实现,感觉没有从它那获得什么实质性 东西,个人觉得接口就是为了提供一种规范要求对方必须这样来做,同时可以实现同步开发。、
package S;
interface Instrument {
public void paly(String s);
public void adjust();
}