多重继承

whwclp 2004-06-23 11:22:18
能否举一个简单的例子来说明一个类怎样用接口来实现对另两个类的继承功能
...全文
143 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hl_longman 2004-06-28
  • 打赏
  • 举报
回复
MARK!
ProgramNoLove 2004-06-28
  • 打赏
  • 举报
回复
不可以.如果是类,最多只能继承一个.如果非要继承两个类中的内容,那可以先写两个类的接口,让想继承的类去继承这两个接口,就得到那两个类的内容了.
whwclp 2004-06-25
  • 打赏
  • 举报
回复
接口可以多重继承我明白,上面各位所举的例子也基本都是关于接口之间的多重继承,可是假如有两个类,那么想创建一个新类来继承它们,用接口怎样实现。我原来学过C++,对C++的多重继承较熟悉,但对Java中的这种情况理解的还是不透。
ProgramNoLove 2004-06-24
  • 打赏
  • 举报
回复
如果继承的是类,也就是非接口,只能继承一个,但如果是接口就可以继承多个了。当然,你继承了一个类(非接口)的同时,也可以继承接口。看下面

import java.util.*;

interface CanFight {
void fight();
}

interface CanSwim {
void swim();
}

interface CanFly {
void fly();
}

class ActionCharacter {
public void fight() {}
}

class Hero extends ActionCharacter
implements CanFight, CanSwim, CanFly {
public void swim() {}
public void fly() {}
}

public class Adventure {
static void t(CanFight x) { x.fight(); }
static void u(CanSwim x) { x.swim(); }
static void v(CanFly x) { x.fly(); }
static void w(ActionCharacter x) { x.fight(); }
public static void main(String[] args) {
Hero h = new Hero();
t(h); // Treat it as a CanFight
u(h); // Treat it as a CanSwim
v(h); // Treat it as a CanFly
w(h); // Treat it as an ActionCharacter
}
} ///:~
------------------------------------
体验速度,体验CSDN新版论坛助手:http://community.csdn.net/Expert/TopicView.asp?id=3108679
HawaiiLeo 2004-06-23
  • 打赏
  • 举报
回复
interface Student
{
}

interface Man
{
}

public class MyClass implements Student, Man
{
MyClass me = new MyClass();
}

//这样me instanceof Student,而且me instanceof Student Man
HawaiiLeo 2004-06-23
  • 打赏
  • 举报
回复
Java中是单继承,即只能从一个类中继承,所以要想实现多继承,必须现实接口。
类中方法已经实现,所以从类中进行继承是继承了方法中的功能,即基于实现(功能)
进行继承,而接口中的方法没有方法体,所以是基于接口进行继承。

eclipse0016 2004-06-23
  • 打赏
  • 举报
回复
去看书吧,Thinking in Java讲的很清楚啊
haozhangpk 2004-06-23
  • 打赏
  • 举报
回复
看一看<java与模式>那本书就一切都明白了
whwclp 2004-06-23
  • 打赏
  • 举报
回复
接口是独立定义的,那么怎样在创建的新类中用它来继承另两个类?
blasterboy 2004-06-23
  • 打赏
  • 举报
回复
两个接口,父亲,厨师:)
你实现了这两个接口,那么你就有两个角色了,也就是你有两个类型
在用到父亲的地方,你可以去,用到厨师的地方你也可以去
Arias 2004-06-23
  • 打赏
  • 举报
回复
看一看!!


import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.util.*;

public class TimerDemo implements ActionListener,ChangeListener{

JFrame f=null;
ImageIcon[] icons;
JSlider slider;
JLabel label;
JToggleButton toggleb1,toggleb2;
JButton b;
javax.swing.Timer timer;
int index=0;

public TimerDemo(){
f=new JFrame("Timer Example");
Container contentPane=f.getContentPane();
icons=new ImageIcon[5];
for(int i=0;i<icons.length;i++){
icons[i]=new ImageIcon("doc"+(i+1)+".gif");
}

label=new JLabel(icons[0]);
JPanel panel1=new JPanel();
panel1.setLayout(new GridLayout(2,1));
slider=new JSlider();
slider.setPaintTicks(true);
slider.setMajorTickSpacing(20);
slider.setMinorTickSpacing(10);
slider.setPaintLabels(true);
slider.addChangeListener(this);
panel1.add(slider);

JPanel buttonPanel=new JPanel();
buttonPanel.setLayout(new GridLayout(1,3));
toggleb1=new JToggleButton("Start");
toggleb1.addActionListener(this);
buttonPanel.add(toggleb1);

b=new JButton("Restart");
b.addActionListener(this);
buttonPanel.add(b);

toggleb2=new JToggleButton("Don't Repeat");
toggleb2.addActionListener(this);
buttonPanel.add(toggleb2);
panel1.add(buttonPanel);

Hashtable table=new Hashtable();
table.put(new Integer(0),new JLabel("µÍ"));
table.put(new Integer(50),new JLabel("ÖÐ"));
table.put(new Integer(100),new JLabel("¸ß"));
slider.setLabelTable(table);

timer=new javax.swing.Timer(slider.getValue()*10,this);

contentPane.add(label,BorderLayout.CENTER);
contentPane.add(panel1,BorderLayout.SOUTH);

f.pack();
f.show();

f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
f.dispose();
System.exit(0);
}
});
}

public static void main(String args[]){
new TimerDemo();
}

public void actionPerformed(ActionEvent e){
if(e.getSource()==toggleb1){
if(e.getActionCommand().equals("Start")){
timer.start();
toggleb1.setText("Stop");
}
if(e.getActionCommand().equals("Stop")){
timer.stop();
toggleb1.setText("Start");
}
}
if(e.getSource()==toggleb2){
if(timer.isRepeats()){
timer.setRepeats(false);
}
else{
timer.setRepeats(true);
timer.start();
}
}
if(e.getSource()==b){
slider.setValue(50);
timer.restart();
}
if(e.getSource()==timer){
if(index==5){
index=0;
}
label.setIcon(icons[index]);
label.repaint();
index++;
}
}

public void stateChanged(ChangeEvent e){
timer.setDelay(slider.getValue()*10);
}
}
北极猩猩 2004-06-23
  • 打赏
  • 举报
回复
基于接口进行继承,而不是基于实现(功能)进行继承

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧