精华内容
下载资源
问答
  • java单继承和多继承

    千次阅读 2019-10-04 19:55:27
    java继承关键字extend和implement,Java所有子类都继承自 java.lang.Object,即java.lang.Object是Java的祖先类,当一个类内没有继承关键字的时候,默认继承自Object(这个类在 java.lang 包中,所以不需要 import)...

    java单继承和多继承

    单线程:一个子类只能继承自一个父类
    多线程:一个子类可以继承自多个父类

    java继承关键字extend和implement,Java所有子类都继承自 java.lang.Object,即java.lang.Object是Java的祖先类,当一个类内没有继承关键字的时候,默认继承自Object(这个类在 java.lang 包中,所以不需要 import)

    Java不能多继承,Java的多继承特性是通过接口实现的,所以implement实现的多继承没有构造函数

    注意:类的继承并不改变类成员的访问权限。也就是说,如果父类的成员是公有的、被保护的或默认的,它的子类仍具有相应的这些特性。比如菱形是四边形的派生类,有四边形的所有特征,还可以增添自己的特征。Java中的类的继承就是这样实现的通过扩展其他类形成新的类。

    展开全文
  • java中单继承与多继承

    千次阅读 2015-05-06 22:39:23
    C++中支持多继承,但是在java之中不允许一个子类有多个直接父类,java对此进行了改良。
      单继承:一个子类只能有一个直接父类
      多继承:一个子类可以有多个直接父类(java中不允许,进行了改良)
            不直接支持,因为多个父类中有相同成员,会产生调用的不确定性

            在java中是通过“多实现”的方式来实现的。


    class A
    {
    	void show()
    	{
    		System.out.println("a");
    	}
    }
    
    class B
    {
    	void show()
    	{
    		System.out.println("b");
    	}
    }
    
    class C extends A, B
    {
    }
    //主函数中
    C c = new C();
    c.show();

    如以上代码,类A、B中都有一个show()方法,类C同时继承A和B,当在主函数中创建C的对象并调用show()方法时,

    就会出现不确定性,不知道应该调用哪个类中的show()方法。


    但是java支持多层(多重)继承
    例如:C继承B, B继承A,这样就会出现继承体系


    当要使用一个继承体系时:
    1.查看该体系中的顶层类,了解该体系的基本功能。
    2.创建体系中的最子类对象,完成功能的使用。

    展开全文
  • Java单继承经典面试题

    千次阅读 热门讨论 2018-04-01 21:25:31
    一、面试题 面试题 LVXQ.java 代码如下public class LJXQ { public static void main(String[] args) { A a = new A(); B b = new B(); C c = new C(); D d = new D(); System.out.println(a.get(a) + &...

    一、面试题

        面试题 LVXQ.java 代码如下

    public class LJXQ {
    	public static void main(String[] args) {
    
    		A a = new A();
    		B b = new B();
    		C c = new C();
    		D d = new D();
    		System.out.println(a.get(a) + " - " + a.get(d) + " - " + a.get(b) + " - " + b.get(a) + " - " + b.get(c) + " - "
    				+ b.get(d));
    	}
    
    }
    
    class A {
    	String get(D d) {
    		return "AD";
    	}
    
    	String get(A a) {
    		return "AA";
    	}
    }
    
    class B extends A {
    	String get(A a) {
    		return "BA";
    	}
    
    	String get(B b) {
    		return "BB";
    	}
    }
    
    class C extends B {
    }
    
    class D extends B {
    }

        请写出运行结果;答案暂不公布,可以尝试解决,看看自己的继承掌握的如何。

    二、继承

    2-1.继承定义

        特殊类的对象拥有一般类的全部属性与行为,称为特殊类对一般类的继承。

        Java的三大特性,继承、封装、多态。在C++中也有继承,不过是多继承,子类可以有多个父类,而Java中不支持多继承,子类只能有一个父类或者没有父类。所谓继承,简单理解可以从字面意思去认识学习,就是"子"可以继承"父"所拥有的属性及方法。传承接收后就是自己的属性或方法。

    2-2.继承说明

        这里说道继承是拥有父类的全部属性和方法,但我们发现父类的私有属性,子类是不可以使用的。这违背了继承的定义吗,拥有父类的全部属性与行为。答案是没有。用数学去描述子类与父类的话,应该是子类大于等于父类。在一个子类被创建时,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者结合形成子类的对象。所以父类的全部属性和行为子类会拥有,但是对于父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但也仅仅是拥有(I like you, But just like you!)。这也是关键字private,protected,public的意义所在。

    三、面试题分析

        我们使用一个不大聪明的方法去解决这个问题。我把所有的方法都写出来。就能直观的看出结果,当然重点是子类是如何继承父类的行为的。是对继承这一特性知识掌握的测试。

        补充子类全部方法后的 DDDL.java

    /**
     * Java单继承面试题
     * 补充子类中包含的全部方法
     * @author niaonao 
     */
    public class DDDL {
    	public static void main(String[] args) {
    
    		A a = new A();
    		B b = new B();
    		C c = new C();
    		D d = new D();
    		
    		System.out.println(a.get(a) + " - " + a.get(d) + " - " + a.get(b) + " - " + b.get(a) + " - " + b.get(c) + " - "
    			+ b.get(d));
    	}
    
    }
    
    class A {
    	// TODO
    	String get(D d) {
    		return "AD";
    	}
    
    	// TODO
    	String get(A a) {
    		return "AA";
    	}
    
    	/*
    	 * 说明:类B 继承于A,get(B b)直接继承get(A a) 
    	 * 关系:class A -> get(A a)
    	 */
    	String get(B b) {
    		return "AA";
    	}
    
    	/* 
    	 * 说明:a.get(c); 类 A 中没有 get(C c) 方法;但是有 get(A a) 方法;
    	 * 类C 继承于B,类B 的父类是A,类方法get(C c)就近原则继承 get(B a); 没有 get(B b),就近原则 get(A a);即a.get(C c) 的实现逻辑继承 get(A a) 的实现逻辑
    	 * 关系:class A -> get(A a)
    	 */
    	String get(C c) {
    		return "AA";
    	}
    
    }
    
    class B extends A {
    	// TODO
    	String get(A a) {
    		return "BA";
    	}
    
    	// TODO
    	String get(B b) {
    		return "BB";
    	}
    
    	/* 
    	 * 说明:类B 没有方法get(C c),且父类A 也没有该方法,而类C 是B 的子类,类B 的方法get(C c)就近继承get(B b) 
    	 * 关系:class B -> get(B b)
    	 */
    	String get(C c) {
    		return "BB";
    	}
    
    	/* 
    	 * 说明:类B 的父类A 存在方法get(D d),直接继承过来。 
    	 * 关系:class A -> get(D d)
    	 */
    	String get(D d) {
    		return "AD";
    	}
    }
    
    class C extends B {
    	/* 
    	 * 说明:父类B 中有方法get(A a),直接集成过来即可。 
    	 * 关系:class B -> get(A a)
    	 */
    	String get(A a) {
    		return "BA";
    	}
    
    	/* 
    	 * 说明:父类B 中有方法get(B b),直接集成过来即可。 
    	 * 关系:class B -> get(B b)
    	 */
    	String get(B b) {
    		return "BB";
    	}
    
    	/*
    	 * 说明:类C 与类D 都继承于B。父类B 中没有get(C c),B 的父类A 中也没有此方法,则类C 继承类B 的get(B b)。 
    	 * 关系:class B -> get(B b)
    	 */
    	String get(C c) {
    		return "BB";
    	}
    
    	/*
    	 * 说明:父类B 继承于类A,A中有方法get(D d),直接继承过来即可。 
    	 * 关系:class A -> get(D d)
    	 */
    	String get(D d) {
    		return "AD";
    	}
    }
    
    class D extends B {
    	String get(A a) {
    		return "BA";
    	}
    
    	String get(B b) {
    		return "BB";
    	}
    
    	String get(C c) {
    		return "BB";
    	}
    
    	String get(D d) {
    		return "AD";
    	}
    
    }

     

    四、面试题结果

     

        补充子类全部方法后 DDDL.java 运行结果

    图4-1.面试题结果图

        上面补充的方法和注释是否正确。我们通过一段测试代码测试一下面试题 LVXQ.java 及补充全部方法后的面试题 DDDL.java。测试代码如下

    		String result = 
    				"A : " + a.get(a) + " - " + a.get(b) + " - " + a.get(c) + " - " + a.get(d) 
    				+ "\nB : " + b.get(a) + " - " + b.get(b) + " - " + b.get(c) + " - " + b.get(d)
    				+ "\nC : " + c.get(a) + " - " + c.get(b) + " - " + c.get(c) + " - " + c.get(d) 
    				+ "\nD : " + d.get(a) + " - " + d.get(b) + " - " + d.get(c) + " - " + d.get(d);
    		System.out.println(result);

        测试代码运行结果如下:

    图4-2.LJXQ.java测试结果图

    图4-3.DDDL.java测试结果图

     

     

     

    展开全文
  • JAVA 单继承 与 接口 多重继承

    千次阅读 2012-08-22 11:56:04
    又是一个牛角尖,只是语言不够严谨而已,Java中只支持类的单继承,接口之间的继承同样也是使用extends关键字,但是接口之间是支持多继承的,如下面的例子: [java] view plaincopy interface IP1 { }...
    又是一个牛角尖,只是语言不够严谨而已,Java中只支持类的单继承,接口之间的继承同样也是使用extends关键字,但是接口之间是支持多继承的,如下面的例子: 
    
    1. interface IP1 {  
    2. }  
    3.   
    4. interface IP2 {  
    5. }  
    6.   
    7. public interface ISub extends IP1, IP2 {  
    8.   
    9. }  

      很明显,上面的代码是没有问题的。所以标题中的应该是不严谨的,严格的说应该是Java中类的继承只支持单继承。

      当然,这样我们自然会想到多继承的问题,如果两个父接口中有同样的方法,那么子接口中怎么办呢?

    1. interface IP1 {  
    2.     public void test();  
    3. }  
    4.   
    5. interface IP2 {  
    6.     public void test();  
    7. }  
    8.   
    9. public interface ISub extends IP1, IP2 {  
    10.   
    11. }  

      其实这个问题不用担心,因为接口只是对方法的一个声明,并没有具体的实现,所以子接口中的方法属于哪个父接口并不重要,重要的是当实现这个接口的时候只需有一个该方法的实现就可以了,这个方法的实现应该同时属于两个父接口。

      很明显,这不是真正的问题,真正的问题是如果在两个父接口中分别定义了名称和参数都相同,而返回结果却不同的方法:

    1. interface IP1 {  
    2.     public void test();  
    3. }  
    4.   
    5. interface IP2 {  
    6.     public String test();  
    7. }  
    8.   
    9. public interface ISub extends IP1, IP2 {  
    10.   
    11. }  

      这同已经有问题了,这时会有编译时错误,原因很简单,方法的重载只能是相同的方法名,不同的输入参数;而对于这两个方法,它们具有相同的方法名,相同的输入参数,只是不同的返回参数,是不能作为重载方法的,所以对于编译器来说,这里是一个方法的重复定义,明显是不能通过编译的。

      同样,这样的问题也存在于一个类同时实现多个接口的情况,所以,在这些情况下,我们必须注意一点,就是具有相同方法名,相同输入参数的方法,是不能出现在同一个类或接口中的。


    展开全文
  • 今天看那书上说:java是但继承,并不支持多继承,后来又讲到java支持多继承,是在接口的基础上实现多继承。 总的来说还是不支持多继承,要通过其他方式来弥补java继承的缺点,java不支持但继承的原因是因为考虑了...
  • java单继承

    千次阅读 2016-04-05 15:00:47
    继承分为单继承和多重继承单继承是指一个子类最多只能有一个父类。 多继承是一个子类可以有二个以上...JAVA不支持多继承单继承使JAVA继承关系很简单, 一个类只能有一个父类,易于管理程序,同时一个类可以实现
  • java单继承 接口多继承

    千次阅读 2014-12-02 15:01:55
    java类之间的继承单继承的,即一个子类只能继承一个父类,这样是避免多继承时父类方法出现重写,子类不知道调用哪个父类的方法。 如:public class son extends father{ //do something here } 但是对于接口来说...
  • Java类是单继承的。classB Extends classAjava接口可以多继承。Interface3 Extends Interface0, Interface1, interface……不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A如何决定该...
  • 为什么JAVA只有单继承

    千次阅读 2016-08-14 10:55:16
    首先我们要明确一个事实,在Java语言中类只能单继承与某个类,却可以多集成接口。同时接口与接口之间可以多继承。为什么Java类只能单继承? “Java是一种简单的,面向对象的,分布式的,解释型的,健壮的,安全的,...
  • java为什么单继承,单机和多继承各自特点
  • Java 继承

    千次阅读 多人点赞 2019-05-07 11:12:43
    java继承的概念 Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为, 并能扩展新的能力, 继承使用的是extends 类的继承格式 class 父类 { } class ...
  • 为什么Java单继承

    千次阅读 多人点赞 2017-03-05 12:40:30
    这两天在学习Java中的继承,其中提到Java单继承。于是想,为什么是单继承而不能多继承呢?  在网上找了很多资料,以下是我的一点理解。  假设说Java是可以多继承的,比方说,我现在有一个A类,我又编写了两个...
  • Python的多重继承Java单继承

    千次阅读 2015-01-30 16:12:27
    最近在学习Python,了解到Python是允许使用多重继承的,与Java单继承不同。 仔细思考之后觉得Python的这种多重继承的设计更为合理些,更接近现实世界。因为我觉得一个物体不能严格的把它归为确定的某一类,拿动物...
  • Java继承

    万次阅读 多人点赞 2019-06-06 17:25:11
    面向对象编程中,继承是一个比较重要的概念,继承描述的是事物之间的所属关系,是从已有的类中构建出新的类,已有的类称为父类,新的类称为子类,子类具有父类的数据属性和方法,并能扩展新的属性和方法(不能继承...
  • Java为什么只能单继承

    千次阅读 2021-01-18 10:38:09
    Java为什么只能单继承 Java中类不能多继承类是为了安全。因为无论是抽象类还是非抽象类都包含非抽象的方法(非抽象类也可能没有),当类可以多继承类时,被继承的不同的父类可能会有同名同参的方法,如果子类也没有...
  • java只允许单继承

    千次阅读 2017-04-25 22:22:55
    java中类只能单继承,一个类只能有一个直接父类,可以有多个间接父类。 java通过接口来实现多继承,接口里只有方法的声明没有实现。 C++中可以实现多继承, 多继承可能会多继承可能会导致钻石环问题---假设...
  • 众所周知,Java是一种面向对象的只允许单继承的语言,这是每个Java程序员从业者都知道定理。 本文的目的,主要从两个方面来思考Java单继承的这个问题: 为什么Java类被设计为只能单继承? 怎样曲线实现多继承的效果...
  • 所以,java中就没有设计类的多继承。 但是接口就设计成多继承,是因为接口可以避免上述问题: 首先,接口中的只有抽象方法和静态常量。 对于一个类实现多个接口的情况和一个接口继承多个接口的情况,因为接口只有...
  • 新手小白学JAVA 继承 super

    万次阅读 多人点赞 2021-05-10 08:49:27
    Java继承是会用已存在的类的定义作为基础建立新类的技术 新类的定义可以增加新的数据或者新的功能,也可以使用父类的功能,但不能选择性的继承父类(超类/基类) 这种继承使得复用以前的代码非常容易,能够大大的缩短开发...
  • Java继承实例

    千次阅读 2019-05-17 15:08:28
    Java 继承 继承java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承可以理解为一个对象从另一个对象获取属性的过程。 如果类A是类B的父类,而类B是类C的父类,我们也称C是A的子类,类C是从类A...
  • 聊一聊为什么JAVA只允许单继承

    千次阅读 2021-03-11 17:28:19
    聊一聊为什么JAVA只允许单继承 在开始啊我首先给大家解释一个误区。JAVA并不是不允许多继承,而是不允许”实现多继承“,也就是class是不允许多继承的,interface允许多继承。 为什么要这么设计呢? 从语言方面说,...
  • java的类单继承、接口可以多继承

    千次阅读 2015-04-02 18:26:43
    java的类单继承、接口可以多继承
  • java继承

    万次阅读 2017-12-11 16:56:35
    java语言中,类可以从其他类继承而来,并继承父类的成员和方法。 继承是简单但是非常强大:当你需要创建一个新类,但是已经有其他类,它已经包含了一些你需要的代码,那么你可以从已有的这个类,继承新的类。...
  • Java继承的定义与使用

    万次阅读 多人点赞 2018-10-21 12:00:25
    1.2.2 Java只允许单继承不允许多继承(一个子类继承一个父类)1.2.3 在继承时,子类会继承父类的所有结构。阿里java校招笔试题 继承   继承的主要作用在于,在已有基础上继续进行功能的扩充。 定义两个类(学生...
  • 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
     在Java语言中禁止多重继承:一个类可以具有多个直接父类。多重继承不合法的原因是容易引发意义不明确。例如,有一个类C,如果允许它同时继承A类与B类(class C extends A,B{}),假如A、B两个类都有同一种方法fun...
  • java-继承和多态

    万次阅读 多人点赞 2018-08-25 21:30:12
    单继承:在类层次中,子类只继承一个父类的数据结构和方法,一个类只有一个父类 多继承:在类层次中,子类继承了多个父类的数据结构和方法,一个类允许有多个继承java支持多层继承) //父类 public class ...
  • Java继承超详细

    千次阅读 多人点赞 2021-03-02 14:58:30
    今天我们开始学习有关Java继承的知识。 继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 继承的作用:通过继承可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,225,664
精华内容 490,265
关键字:

java单继承

java 订阅