Java:使用内部类实现类的多重继承

Java不支持类的多重继承,但可以使用内部类来继承实现更多的类。

下面的例子,目标类需要继承两个抽象类(A和B)。目标类C本身继承类A,并使用一个匿名内部类继承另一个类B。

MultiImplementation.java

abstract class A {
  abstract void methodA();
}
abstract class B {
  abstract void methodB();
}
class C extends A {
  @Override
  void methodA() {
    System.out.println("extends A's method");
  }
  B getB() {
    return new B() {
      @Override
      void methodB() {
       System.out.println("extends B's method");
      }
    };
  }
}
public class MultiImplementation {
  public void doA(A a) {
    a.methodA();
  }
  public void doB(B b) {
    b.methodB();
  }
  public static void main(String[] args) {
    MultiImplementation mi = new MultiImplementation();
    C c = new C();
    mi.doA(c);
    mi.doB(c.getB());
  }
}

结果:

extends A's method
extends B's method

时间: 2024-10-02 22:27:08

Java:使用内部类实现类的多重继承的相关文章

举例讲解Java的内部类与类的加载器_java

内部类 class A { //Inner1 要在 A 初始化后 才能使用,即要被A的对象所调用 class Inner1 { int k = 0; // static int j = 0; //A加载后,Inner1没有加载,所以这个 静态变量j 无法立即使用,报错 final int z = 0; /*static void say1() { }*/ void say2() { } } //Inner2 在A加载好后就可以使用了 static class Inner2 { int k = 0

关于JAVA含有内部类的类编译成class后修改Class文件出现错误

问题描述 JAVA类编译后是class文件,编译后生成了getname.class,和getname$1.class.这里我没有源码,我修改了getname.class中的一个System.out.print中输出的内容,比如原来输出wang,我使用工具将输出内容改成了li,文件反编译后与原来没有修改时的内容一致,但是在TOMCAT启动的时候报错了,报错内容为java.lang.ClassFormatError: Wrong InnerClasses attribute length in cl

浅析Java中的嵌套类和内部类

以前看<Java编程思想>的时候,看到过嵌套类跟内部类的区别,不过后来就把它们的概念给忘了吧.昨天在看<数据结构与算法分析(Java语言版)>的时候,又遇到了这个概念,当时就很大的疑惑:嵌套类跟内部类有什么区别?只有是否有关键字static的区别吗? 所以今天找了个时间查了一下两者的详细区别,总结在这篇博客中,既方便自己的复习和学习,也启示他人吧. 1,概念: 定义在一个类内部的类,叫作"嵌套类".嵌套类分为两种:static的和非static的.后者又有一个专

内部类-Java编程中A类如何调用B类中M方法里的C类的实例?

问题描述 Java编程中A类如何调用B类中M方法里的C类的实例? import java.awt.*; import java.awt.event.*; public class TestListener{ public static void main(String[] args){ Counter c1 = new Counter("Hello"); c1.CreatButton(); c1.add(c1.button); ----------------------------(

详解java中的Collections类_java

一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数组无法完全表达你要表达的东西,而定义一个类Class有太过麻烦,这时候,你可以考虑一下用Java中的Collections类.使用Collections类,必须在文件头声明import java.util.*; 一.动态.有序.可变大小的一维数组Vector与ArrayList  Collectio

dos 编译java 自己创建的类找不到?怎么解?

问题描述 dos 编译java 自己创建的类找不到?怎么解? 路径:com.test:一类:package com.web; class Function{ public int add(int aint b){ return a+b; }}二类:package com.web;import com.web.Function;class Fun{ public int reduce(int aint b){ Function f = new Function(); return f.add(ab

android中内部类提示类后面&amp;amp;quot;(&amp;amp;quot;&amp;amp;quot;]&amp;amp;quot;出现错误,格式错误?

问题描述 android中内部类提示类后面"(""]"出现错误,格式错误? 在一个类private void LoadOpenDialog(final File file) {中,放置了类 boolean checkEndsWithInStringArray (String checkItsEnd, String[] fileEndings){ for(String aEnd:fileEndings){ if(checkItsEnd.endsWith(aEnd))

java语法-java中内部类的作用是神马

问题描述 java中内部类的作用是神马 java中内部类的作用是神马 java中内部类的作用是神马 java中内部类的作用是神马 解决方案 Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类,内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类.内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点. 内部类需要有外部类对象作为宿主的,它只能依存外部类而存在. 解决方案二: java中内部类的作用是神马不知道啊

JAVA中内部类的特点?

问题描述 JAVA中内部类的特点具体有些什么大侠们能不能写点具体的代码体现下呀 解决方案 解决方案二:这个不是一句话说的清的,建议看看<Java编程思想>,里面有很详尽的见解解决方案三:内部类一情况下都很少用,只是用于一些特殊功能上.有兴趣研究可以查阅相关书籍!解决方案四:谢谢诶小弟初学解决方案五:如果一个类得在逻辑上比较简单才考虑使用内部类,不然很少用,可以写成内部类的当然也能写成外部类,所以理解不了也没多大关系解决方案六:我在看<编程思想>,第十章的内部类是个重点呢,知识点很多