使用接口进行如下程序设计
个人电脑(PC)具有PCI插槽,可以插入PCI卡。显卡、声卡、语音卡都可以作为PCI卡插入PCI插槽中
PC,PCI,slot,VideoCard,SoundCard, VoiceCard
interface PCI{
public void pci();
}
class VideoCard implements PCI{
public void pci(){
System.out.println("This is a videoCard");
}
}
class SoundCard implements PCI{
public void pci(){
System.out.println("This is a soundCard");
}
class VoiceCard implements PCI{
public void pci(){
System.out.println("This is a voiceCard");
}
class PC{
public void slot(PCI pci){
pci.pci();
}
}
class PCIDemo{
public static void main(String[] args){
PC pc = new PC();
pc.slot(new VideoCard());
pc.slot(new SoundCard());
pc.slot(new VoiceCard());
}
}
高富帅
Height
Rich
Handsome
Girl boyFriend(HRH h)
用匿名内部类实现
interface Height{
public void high();
}
interface Rich{
public void rich();
}
interface Handsome{
public void handsome();
}
interface HRH extends Height,Rich,Handsome{
}
class Girl{
public void boyFriend(HRH h){
h.high();
h.rich();
h.handsome();
}
}
class NoNameDemo{
public static void main(String[] args){
Girl girl = new Girl();
girl.boyFriend(new HRH(){
public void high(){
System.out.println("很高");
}
public void handsome(){
System.out.println(“很帅”);
}
public void rich(){
System.out.println(“很有钱”);
}
});
}
}
使用适配器模式实现窗口的事件处理程序
窗口可以响应最大化事件、最小化事件、大小改变事件、恢复事件、移动事件、关闭事件
通过适配器对大小改变事件、移动事件和关闭进行默认处理,窗口只关心最大化和最小化事件即可。
Window
WindowListener{max min resize restore move close}
interface WindowListener{
public void max();
public void min();
public void resize();
public void restore();
public void move();
public void close();
}
abstract class WindowListenerAdapter implements WindowListener{
public void resize(){
}
public void restore(){
}
public void move(){
}
public void close(){
}
}
class Window{
WindowListener listener;
public void setListener(WindowListener listener){
this.listener = listener;
}
public void max(){
listener.max();
}
public void min(){
listener.min();
}
}
class AdapterDemo(){
public static void main(String[] args){
Window window = new Window();
window.setListener(new WindowListenerAdapter(){
public void max(){
System.out.println("窗口最大化");
}
public void max(){
System.out.println("窗口最小化");
}
});
window.max();
window.min();
}
}
使用抽象类和接口实现适配器模式设计。涉及的类和接口分别为ButtonListener(接口),
其中含有click() / dbclick() / keyUp() / keyDown()等方法。
ButtonAdapter(按钮适配器类),适配器中对非click()方法进行默认实现。
Button类中添加addListener(ButtonListener l)方法。
interface ButtonListener{
public void click();
public void dbclick();
public void keyUp();
public void keyDown();
}
abstract class ButtonAdapter implements ButtonListener {
public void keyUp(){
}
public void keyDown(){
}
}
class Button{
private ButtonListener l;
public void addListener(ButtonListener l){
this.l = l;
}
public void click(){
l.click();
}
public void dbclick(){
l.dbclick();
}
}
class AdapterDemo(){
public static void main(String[] args){
Button button = new Button();
Button.addListener(new ButtonAdapter(){
public void click(){
System.out.println("单击了按钮");
}
public void dbclick(){
System.out.println("双击了按钮");
}
});
button.click();
button.dbclick();
}
}
阐述什么是多态。
为什么函数可以覆盖,而属性不能覆盖?
答:对象的多种状态,对继承来说,用父类引用子类的对象;对接口来说,用接口引用实现类的对象。根据javabean原则,公有方法可以被继承,因此可以被子类覆盖,而属性是私有财产,不能被子类覆盖。