精华内容
下载资源
问答
  • 也可同时继承自 一个接口,继承接口的方法并完成定义。有一个神奇的魔法:同一种对象,都是IAct对象,调用同一种方法Act() 。但是执行的情况却完全不一样。要注意的是,一个接口对象,只能执行接口里的方法,即使...

    一个类,可以继承自一个普通类,继承它的成员变量和方法;也可同时继承自 一个接口,继承接口的方法并完成定义。

    using System;
    
    namespace Interface
    {
    interface IAct{
    	void Act();
                  }
    class Human {
    	string name;
    	float length;
    	public Human(string n,float l)
    		{
    		name = n;
    		length = l;
    		}
    	public void Describe()
    		{
    		Console.WriteLine("My name is {0},my length is {1}",name,length);
    		}
    			}
    class Man:Human,IAct {//一个类,可以继承自一个普通类,也可同时继承自一个接口
    	public Man(string n,float l):base(n,l)
    		{ }
    	public void Act()//对接口里的方法定义
    		{
    		Console.WriteLine("my limbs move and my mouth open and close");
    		}
    	 				  }
    
    class Woman:Human,IAct{//一个类,可以继承自一个普通类,也可同时继承自一个接口
    	public string characteristics;//在继承之外,也可再定义新成员
    	public Woman(string n,float l):base(n,l)
    		{
    		characteristics = "My temperament is special";
    		}
    		public void Act()//对接口里的方法定义
    		{
    		Console.WriteLine("My limbs move and tooth tear");
    		}
    						}
    
    
    class Program{
    	public static void Main(string[] args)
    		{
    		IAct iA1,iA2;
    		iA1 = new Man("gyg",171);
    		iA2 = new Woman("gyy",165);
    		iA1.Act();
    		iA2.Act();
    		Console.Write("Press any key to continue . . . ");
    		Console.ReadKey(true);
    		}
    			  }
    }

    在上面的代码里面,不仅阐述清楚了一个类继承自普通类和接口的做法。还有一个神奇的魔法:同一种对象,都是IAct对象,调用同一种方法Act() 。但是执行的情况却完全不一样。


     了解了这个魔法的原理,就知道它其实是很合理的。

    因为Man类和 Woman类都是继承自IAct类。那么一个Man或Woman对象自然也是一个IAct对象。因此将对象声明成IAct类型,但是赋给它的却是Man或者Woman对象,在后者,IAct中的方法已经个性化定义过了。因此,调用同一个方法,但是执行情况却不同

    要注意的是,一个接口类对象,只能执行接口里的方法,即使返给它的是子类的对象。只要它的type是接口类,那么,它就只能执行接口里的方法。如果我有幸你读到这篇文章,你可以对已经赋了子类对象的接口类对象使用子类才有的方法,看编译器是如何报错的。谢谢

    展开全文
  • B 和 C 继承 A,且都重写了 A 中的同一个方法 D 同时继承 B 和 C 对于 B、C 重写的 A 中的方法, D 会继承一个?这里就会产生歧义 考虑到这种二义性问题,Java 不支持多重继承 Java...

    多继承会产生钻石问题(菱形继承)

    • 类 B 和类 C 继承自类 A,且都重写了类 A 中的同一个方法
    • 类 D 同时继承了类 B 和类 C
    • 对于类 B、C 重写的类 A 中的方法,类 D 会继承哪一个?这里就会产生歧义
    • 考虑到这种二义性问题,Java 不支持多重继承


    Java 支持类实现多接口

    • 接口中的方法是抽象的,一个类实现可以多个接口
    • 假设这些接口中存在相同方法(方法名与参数相同),在实现接口时,这个方法需要实现类来实现,并不会出现二义性的问题


    从 JDK1.8 开始,接口中允许有静态方法和方法默认实现。当检测到实现类中实现的多个接口中有相同的默认已实现的方法,编译报错


    PS:在JDK 1.5 上实践,接口可以多继承接口

    package constxiong.interview;
    
    /**
     * 测试继承多接口,实现相同方法
     * 从 JDK1.8 开始,接口中允许有静态方法和方法默认实现
     * 当检测到实现类中实现的多个接口中有相同的默认已实现的方法,编译报错
     * @author ConstXiong
     * @date 2019-11-21 10:58:33
     */
    public class TestImplementsMulitInterface implements InterfaceA, InterfaceB {
    
    	public void hello() {
    		System.out.println("hello");
    	}
    
    }
    
    interface InterfaceA {
    	
    	void hello();
    
    	static void sayHello() {
    		System.out.println("InterfaceA static: say hello");
    	}
    
    	default void sayBye() {
    		System.out.println("InterfaceA default: say bye");
    	}
    }
    
    interface InterfaceB {
    	
    	void hello();
    	
    	static void sayHello() {
    		System.out.println("InterfaceB static: say hello");
    	}
    
    //	default void sayBye() {
    //		System.out.println("InterfaceB default: say bye");
    //	}
    }
    

     


    【Java面试题与答案】整理推荐

     

    展开全文
  • java 一个接口可以继承多个接口

    千次阅读 2018-06-19 14:36:33
    Interface3 Extends Interface0, Interface1, interface……不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承一个呢?但接口不存在这样的问题,接口全都是抽象方法继承....

    接口是常量值和方法定义的集合。接口是一种特殊的抽象类。

    java类是单继承的。classB Extends classA

    java接口可以多继承。Interface3 Extends Interface0, Interface1, interface……

    不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承那一个呢?

    但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。

    注意:

    1)一个类如果实现了一个接口,则要实现该接口的所有方法。

    2)方法的名字、返回类型、参数必须与接口中完全一致。如果方法的返回类型不是void,则方法体必须至少有一条return语句。

    3)因为接口的方法默认是public类型的,所以在实现的时候一定要用public来修饰(否则默认为protected类型,缩小了方法的使用范围)。



    以上内容转自:http://blog.csdn.net/tiantiandjava/article/details/46514783

    end

    -----------------------------------------------------------------------------------------------------

    注:作者 望穿秋水见伊人

    展开全文
  • 首先看下面这段代码:(底下有热心网友更正,jdk1.8之后情况确实有点变化,等改天有空继续更) interface a{ void b(); } interface a1 extends a{ void b(); } interface a2 extends a{ void b(); } ...

    首先看下面这一段代码:(底下有热心网友更正,jdk1.8之后情况确实有点变化,等改天有空继续更)

    interface a{
        void b();
    }
    interface a1 extends a{
        void b();
    }
    interface a2 extends a{
        void b();
    }
    interface a12 extends a1,a2{
        void b();
    }
    public class Main {
        public static void main(String args[]){
    
        }
    }
    

    上面a1和a2都继承了接口a,都获得了b方法的定义。然后a12又多重继承了a1和a2。同样,a12获得了b方法的定义。

    但是假设上述代码中的接口都换成类,假如a12没有对b方法作覆盖,那么再假如a1对b方法作了实现,然后a2也对b方法作了实现,那么a12继承的b方法究竟来自于哪个类里的b方法呢?这里似乎舍弃掉哪个方法都不太好。

    所以类的多继承会出现矛盾。

    接口由于都没有具体实现,所以不会出现这个矛盾。

    有人可能会问,那既然没有实现就可以多继承,那么抽象类可以不可以多继承呢?

    答案是不可以的!

    具体为什么不可以,请继续关注我的博客~ 

    好了,还是现在就说吧,抽象类跟普通类在多继承这块我觉得是差不多的。

    看下面代码:

    abstract class a{
        abstract void b();
        void c(){
            System.out.println("c()");
        }
        abstract void d();
        abstract void e();
        abstract void f();
    }
    
    abstract class b extends a{
        abstract void b();
        abstract void d();
        abstract void e();
        void f(){
            System.out.println("f()");
        }
        /*abstract void f();*/
    }
    
    abstract class c extends a{
        abstract void b();
        abstract void d();
        abstract void e();
        abstract void f();
    }
    
    public class Main {
        public static void main(String args[]){
        }
    }

    假设我们有个类d要继承b和c,而且还不重写f方法,那么问题来了,类d里面的f方法是用谁的f方法呢?你可能会觉得,类b都实现了,当然是类b里已经实现的f方法啊?

    你这样认为的话,那java编译器还认为类c里面的抽象方法f也是一个值得保留的特性呢,这时候矛盾就来了...

    但是用接口的话,就很单一了,所有的接口都没有实现~所以随便从哪个接口里来继承并覆盖这个方法都无所谓~

    展开全文
  • 在java中,接口也可以被继承,即通过关键字extends声明一个接口是另一个接口的子接口。由于接口中的方法和变量都是public,子接口继承父类接口中的全部方法和变量。 举例: interface a{} interface b ...
  • 无意间都到篇《走心的安卓工程师跳槽经验分享》,发现自己工作几年了,技术方面虽然有了飞跃的进步,可是不知道自己的技术到了什么...02抽象接口继承实现区别(参考Effective Java 接口 第18条:接口优于抽...
  • java接口可以继承个接口

    千次阅读 2019-03-07 19:11:54
    接口是常量值和方法定义的集合。接口是一种特殊的抽象。...不允许类多重继承的主要原因是,如果A同时继承B和C,而b和c同时有一个D方法,A如何决定该继承一个呢? 但接口不存在这样的问题,接口全都是抽象方法...
  • 如何定义一个不能被继承

    千次阅读 2016-11-08 21:19:41
    如何定义一个不能被继承???... 我们可以在内创建一个对象并提供一个静态的接口,返回创建的这个对象。但是如果使用这种方法的话,在定义B的对象的时候感觉不是很完美。 方法2:  
  • 2. 抽象类继承,如果子类也是一个抽象,并不要求一定重写父类方法。如果子类不是抽象,则要求子类一定要实现父类中的抽象方法。3. 接口类继承。如果是一个接口,可以扩展父接口的方法;如果是一个子抽象,...
  • java中普通类继承,抽象类继承接口类继承,子类一定要重写父类中的方法吗 简单总结,需要重写的有: ...2.抽象类继承,如果子类也是一个抽象,并不要求一定重写父类方法。如果子类不是抽象...
  • Interface3 Extends Interface0, Interface1, interface……不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该继承一个呢?但接口不存在这样的问题,接口全都是抽象方法继承...
  • Java 抽象 接口 继承 实现

    千次阅读 2016-07-23 17:21:14
    接口和抽象的概念不一样。接口是对动作的抽象,抽象是对根源的抽象。 抽象表示的是,这个对象是什么。接口表示的是,这个对象能做什么。...所以,在高级语言上,一个类只能继承一个类(抽象,jav
  • java 不支持多继承,但可以实现多个接口,间接的实现多继承,也可以通过内部。 参考代码:MultiExtendsTest // 测试间接的实现多继承 public class MultiExtendsTest extends D implements A, B, C { @...
  • 哪些类继承了Collection接口

    千次阅读 2019-08-14 17:30:18
    1、Collection接口Collection是最基本集合接口,它定义了允许重复的对象。Collection接口派生了两接口Set和List,分别定义了两种不同的存储方式,如下: 2、 Set接口Set接口继承于Collection接口,它没有...
  • Java回顾:用一个Demo来说明继承抽象和实现接口的简单框架模型
  • java中接口可以继承接口吗?

    千次阅读 2014-09-12 12:55:13
    java中不允许类多重继承的主要原因是:如果A同时继承B和C,而假如B和C同时有一个d方法,A如何决定该继承一个呢?  但接口不存在这样的问题,接口中全都是抽象方法,继承谁都无所谓,所以接口可以继承多个接口。 ...
  • 1:假设我们已经比较熟悉COM了(VS2005) 问题集合: 001:我要创建一个继承自...假设组建为CMathFt(Math不允许用作自定类名)那么它默认继承和实现的一个接口为IMathFt.如果此时希望另外添加一个接口,比如IAdvancedM
  • java 类继承接口继承

    千次阅读 2012-11-30 14:19:41
    在阅读《设计模式--可复用面向对象软件的基础》...一个对象的定义了对象是怎样实现的,同时也定义了对象的内部状态和操作的实现。但是对象的类型与它的接口有关,接口即对象能响应的请求的集合。  --------------
  • TypeScript接口继承

    万次阅读 2017-11-01 17:20:38
    TS引入了 Class()这个概念,作为对象的模板。通过class关键字,可以定义。  基本上,TS的 class 可以看作只是一个语法糖,它的绝大部分功能,... 定义一个类class Point { constructor(x, y) { this.x = x
  • 如果一个类可以继承多个,那么这个所有成员变量名和方法名必须要不同(C++就是这样要求的).这是前提,我们必须确定这个才能用多重继承,如果在方法名或者成员变量名很多情况下,这是很复杂的事情.原因:要确定子类...
  • java只允许继承

    千次阅读 2017-04-25 22:22:55
    java中只能单继承一个类只能有一个直接父类,可以有多个间接父类。 java通过接口来实现多继承接口里只有方法的声明没有实现。 C++中可以实现多继承, 多继承可能会多继承可能会导致钻石环问题---假设...
  • Java继承接口继承和实现

    千次阅读 2017-04-23 17:08:47
    Java的接口继承和实现两个概念,接口可以继承一个接口,并获得其父接口里的所有方法和成员变量,接口也可以被一个类实现,实现接口需要实现接口及其父接口里的所有抽象方法,怎么理解呢? (1)如果...
  • 区分接口继承和实现继承

    千次阅读 2018-03-14 15:41:26
    派生同时继承接口和实现,但是不允许重写任何东西 说这些晦涩难懂的文字,一时半会不好理解,下面分别举实例,用代码来解读这三种需求。下面是一个展现绘图程序中各种几何图形的class继承体系:
  • 答案是可以,但是接口继承接口的意义何在? 我觉得接口最大的作用就是规范程序的结构,如果接口继承一个接口,这是要干嘛啊?
  • java中接口是否可以继承个接口

    千次阅读 2018-11-06 20:04:52
    接口是常量值和方法定义的集合。接口种特殊的抽象。 java是单继承的。classB Extends classA java接口可以多继承。Interface3 Extends Interface0, Interface1, interface…… 不...
  • 接口继承和实现继承的区别

    千次阅读 2018-08-29 22:33:27
    public继承概念由两部分...1、派生类只继承成员函数的接口(也就是声明); 2、派生同时继承函数的接口和实现,但又希望能够覆写(override)它们所继承的实现; 3、派生同时继承函数的接口和实现,并且不允许覆盖任...
  • C#OOP之八 继承 接口和抽象

    千次阅读 2016-04-28 18:24:53
    继承 在现实生活中有所谓的“种瓜得瓜、种豆得豆”的说法,在生物学概念上就是“遗传”的概念,在面向... 继承一次最常用的就是通过合法程序(比如遗嘱)从别人那里接受财产或爵位等,有点类似于世袭制。  另外
  • Java中的单继承,接口的多继承

    千次阅读 2017-10-22 10:30:21
    结论: Java(class)是只能单继承;(classB Extends classA) Java接口(interface)是可以多继承(Interface3 Extends Interface0, Interface1, interface2...) (PS:Java理论上是支持单继承,但是可以使用...单继承:一个
  • 为什么JAVA只允许继承

    千次阅读 2015-09-09 08:50:49
    例如,有一个类C,如果允许它同时继承A与B(class C extends A,B{}),假如A、B两个都有同一种方法fun(),如果定义:  C c = new C();  那么c.fun()应该调用哪一个父类的fun()方法?无法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 374,298
精华内容 149,719
关键字:

一个类只允许继承一个接口吗