精华内容
下载资源
问答
  • JAVA子类继承父类

    2021-03-01 06:34:01
    1、类的继承知识点 (1)java不支持多重继承,也就是说子类至多只能有一个父类 (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法 (3)子类中定义的成员变量和父类中定义的成员变量...

    publicabstractclassA {

    inti=1;

    publicvoidprintI() {

    System.out.println("i="+i);

    }

    }

    publicclassB  extneds A{

    inti=2;

    publicstaticvoidmain(String[] args) {

    B b=newB();

    b.printI();

    }

    }

    那么,控制台打出来的i的值是多少?

    呵呵,如果一下功夫就能说出正确结果1,那么,下面部分就不需要往下看了。

    1、类的继承知识点

    (1)java不支持多重继承,也就是说子类至多只能有一个父类

    (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法

    (3)子类中定义的成员变量和父类中定义的成员变量相同时,则父类中的成员变量不能被继承

    (4)子类中定义的成员方法,并且这个成员方法的名字,返回类型,及参数个数和类型与父类的某个成员方法完全相同,则父类的成员方法不能被继承。

    2、答案是2者如是说

    子类B中的变量i和父类A中的变量i重名, 那么子类B中的变量i将会覆盖掉父类中的同名变量i. 则访问父类中的变量时jvm会把子类cast到父类.所以,打印出的结果应该是“i=2”;

    3、歧义的产生

    歧义的产生最关键的地方是子类B中的变量i将会覆盖掉父类中的同名变量i的覆盖两个字。这里,我觉得这两个字容易误导。应该改为屏蔽或隐藏。因为在这里父类的成员变量是没有被改变。

    4、jvm的执行过程

    (1)子类B 的构造方法被调用,实例化一个B对象,B对象的成员被初始化

    (2)jvm隐含的调用父类的构造方法,实例化一个A对象,A对象的成员被初始化。

    (3)由于A对象的printI()未被屏蔽,所以调用的A对象的printI()函数。

    那么,在这里A的成员函数当然是访问自己的成员变量了。

    5、super关键字

    super关键字在java中的作用是使被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的成员变量和成员成员方法。super是用在子类中,目的是访问直接父类中被屏蔽的成员。上面的代码也可以这样写:

    Java代码

    publicabstractclassA {

    inti=1;

    publicvoidprintI() {

    System.out.println("i="+i);

    }

    }

    publicclassBextendsA{

    publicinti=2;

    publicvoidprintI(){

    super.printI();

    }

    publicstaticvoidmain(String[] args){

    B b=newB();

    b.printI();

    }

    }

    注:

    JVM实例化程序的过程中,若对子类进行实例化,必然要对父类的构造器进行实例化继承。

    C exteds D{}

    C c = new C();

    构造器,采取先父后子的关系。

    而方法,若调用的方法为子类所覆盖,则主动调用儿子的方法,因为此时,已经继承了父类所拥有的

    相关变量,而方法行为,子类具有相对来说的独立性,可以独立调用。

    D c = new C();

    JV处理过程,也是如此。

    先继承D的构造器(基因),再加载C独自的构造器,同时,对相关方法进行相应的调用。

    展开全文
  • Java中子类覆盖父类方法抛出...假设父类抛出异常ParentException,另外有两个子类继承自ParentException分别为ChildException1, ChildException2, 那么 子类可以同时抛出异常ChildException1,ChildException2. 满...

    Java中子类覆盖父类方法抛出异常不能比父类多,这个表述不够准确。

    准确一点的描述为:

    子类抛出的异常类型不能比父类抛出的异常类型更宽泛。假设父类抛出异常ParentException,另外有两个子类继承自ParentException分别为ChildException1, ChildException2, 那么 子类可以同时抛出异常ChildException1,ChildException2. 满足“子类抛出的异常类型不能比父类抛出的异常类型更宽泛”,这一条件。

    注意:

    子类也可以选择不进行抛出任何异常,即使他们是父类所定义的异常。

    为什么Java设计成这样,下面举个例子进行分析:

    package exceptions; class Sick extends Exception{} class FeverSick extends Sick{} class JointSick extends Sick{} class Children extends People{ public void coldAir() throws FeverSick{ } } class Adults extends People{ public void coldAir(){} } class Olds extends People{ public void coldAir() throws JointSick{ } } public class People { public void coldAir() throws Sick{ } }

    如上代码,定义了一个父类People类,以及其三个子类Children, Adults, Olds. 假设在父类中有一个冷空气事件,那么它就会抛出一个Sick类型的异常。但是由于三个子类的抵抗疾病的能力不同,那么Adults类由于抵抗力较强,其方法可能不抛出异常。而Children和Adults类型,由于抵抗力较弱,可能抛出Sick类型的不同子类型。但是需要注意的是,子类不能抛出与Sick类完全不相关的异常类型,例如身高Height类型。因为必须把父类作为一个大前提,其子类不能抛出比父类异常更加出格的异常,否则无法进行识别。

    大概就是这个意思。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对华域联盟的支持。如果你想了解更多相关内容请查看下面相关链接

    展开全文
  • 子类继承父类时各种属性的问题

    千次阅读 2020-02-20 16:15:05
    子类可以继承父类的属性值,后续操作互不影响。 静态属性: public class Main7 extends Father{ //static int test = 11; public static void main(String[] args) { test++; Father father = new Father...

    普通属性

    子类可以继承父类的属性值,后续操作互不影响。

    静态属性:

    public class Main7 extends Father{
     
    	//static int test = 11; 
    	public static void main(String[] args) {
    		test++;
    		Father father = new Father();
    		System.out.println(test);
    	}
    }
     
    class Father{
    	static int test = 1;
    	public Father() {
    		System.out.println(test);
    	}
    }
    

    输出结果: 2 2
    除掉注释的结果:1 12

    JAVA 中如果继承的父类中存在静态变量,多个子类操作的还是同一个静态变量地址,因此子类的操作是要相互覆盖的。
    如果子类重写了父类的方法和静态变量则专属子类了,其它子类的操作也就不会相互覆盖了。此时继承自父类的静态变量会隐藏起来,可以通过父类的类名进行访问。

    私有属性

    在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。所以所谓的继承使子类拥有父类所有的属性和方法其实可以这样理解,子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用。所以子类对象是绝对大于父类对象的,所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的。可以继承,只是无法访问到而已。子类不能直接访问父类的私有属性,子类只能在父类中写一个public的getXXX的方法来获取父类中的private属性,子类就调用父类的getXXX来获取private属性。

    展开全文
  • Java 子类 继承 父类 所有属性、方法

    千次阅读 2018-07-03 12:23:18
    最近学习继承,从书中看到子类继承父类,子类拥有父类所有的属性和方法,于是使 用程序去验证,发现父类的私有属性和私有方法,子类是不能访问的,当然一些父类 的私有属性可能可以通过相应的方法访问到,但是私有的...
  • 子类通过继承父类的属性的行为,我们称之为继承。Java只支持单继承,不支持多继承。因为多继承容易带来安全隐患:当多个父类定义相同的功能,当功能内容不同的时候,子类对象不确定要运行哪一个,在Java中用另一种...
  • 虽然子类继承父类中的私有成员,但是在父类中声明的这些私有成员仍然是子类类型对象的一部分。 因为在实例化对象的时候,只初始化在当前类中所声明的属性明显是不足够的,还需要初始化其父类...
  • 子类重写父类成员方法

    千次阅读 2021-03-14 01:15:16
    最近在学习到Java的继承和多态时遇到了这样的一个问题:关于继承链中子类对父类的私有方法是否可以覆盖的问题,在此记录一下自己对这个问题解决以后的一些心得。首先要明确:子类是不能够覆盖(重写)父类的私有方法的...
  • 继承父类子类

    2019-04-24 21:49:32
    1.什么是继承?...4.如果子类和父类不在同一个包中,子类可以继承父类的哪些成员? 可以继承父类中被public,protected 修饰的成员变量和成员方法。(继承的成员变量或方法的访问权限不变) 如果在同一个...
  • 最近在做题的时候发现自己之前对继承的理解不对,子类能不能继承父类的私有属性和方法,随后在网卡查找,说法不一,看了一些文章,原来可以用断点来判断: 简单的父类例子 package com; /** * @Classname Father ...
  • java继承中子类是不会继承父类的构造函数的,只是必须调用(隐式或者显式) 1.总结: 构造函数是不能继承的,只是用来在子类调用,(如果父类没有无参构造函数,创建子类时,必须在子类构造函数代码体的第一行显式调用...
  • 展开全部因为你在class B中又定义了一次name,这个name会隐藏A中定义,导致B中有自己的name和继32313133353236313431303231363533e59b9...第二段是正确使用继承;网上说法没错publicclassA{publicStringname="aaa";...
  • 子类继承父类的所有成员,包括私有的。
  • 子类重新实现父类的方法称重写;重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改;仅当返回值为类类型时,重写的方法才可以修改返回值类型,且必须是父类方法返回值的子类;要么就不修改...
  • java继承父类构造函数

    2021-03-09 18:23:30
    子类更具体 C) Java 中的继承存在着传递性 D) 当实例化子类时会递归调用父类中的构造方法 6. 以下程序的运行结果是(D) class Person{ public Person(){ ......继承自 Employee 属性:char category;法()可以调用父类...
  • java 子类有没有继承父类的私有属性和私有方法呢? 一个小Demo如下: class Fu { //父类的两个私有属性 private int a = 1; private int b = 2; //父类的一个私有方法 private void haha() { System.out...
  • Java:子类能够继承父类的私有变量和私有方法?

    万次阅读 多人点赞 2016-10-25 19:45:50
    JAVA中私有变量能否被继承...在CSDN论坛上相关大家说法也是众多纷纭,下面简单例子说明相关关系 public class TestExtends { public static void main(String[] args) { Father f = new Son(); Son s = new Son
  • 今天和朋友聊到scala继承的时候,发现有一些问题,我
  • 书中说到子类可以继承父类子类拥有父类所有的属性和方法.可在使用程序去验证时,发现父类的私有属性和私有方法,子类是不能访问的,当然一些父类的私有属性可能可以通过相应的方法访问到,但是私有的方法似乎不能...
  • 看课本上所描述的,子类继承父类,子类拥有父类所有的属性和方法,于是使用程序去验证,发现父类的私有属性和私有方法,子类是不能访问的,当然一些父类的私有属性可能可以通过相应的方法访问到,需要父类提供public...
  • 子类继承父类所有的属性和方法,不包括构造器。 子类能直接访问 从父类继承的公有方法和属性。 对于父类的私有属性,能继承,但是不能直接访问,只能通过父类 public 修饰的 get和set方法来访问。 对于父类的...
  • Java中私有变量能否被子类继承?...在CSDN论坛上相关大家说法也是众多纷纭,下面简单例子说明相关关系 [java] view plain copy  print? public class TestExtends {     public st
  • 所以子类对象是绝对大于父类对象的,所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的。可以继承,只是无法访问到而已。 当子类覆盖父类的成员变量时,父类方法使用的是父类的成员变量,子类方法使用...
  • 有些父类中的成员变量和方法就不能被子类继承,这是父类的成员变量和方法的访问权限的问题。
  • Java中子类能不能继承父类的私有变量和方法?

    万次阅读 多人点赞 2019-09-25 23:16:41
    1、子类继承父类,子类拥有了父类的所有属性和方法。 程序验证,父类的私有属性和方法子类是无法直接访问的。当然私有属性可以通过public修饰的getter和setter方法访问到的,但是私有方法不行。 假设:子类不能够...
  • 看到一个有趣的说法子类不能继承父类的synchronized关键字” 我心里的第一个想法是:为什么子类不能继承父类的synchronized关键字呢 于是我决定用代码实践一下   首先,我先放上测试类主类的代码,运行哪个则...
  • 1、子类继承父类,子类拥有了父类的所有属性和方法。 程序验证,父类的私有属性和方法子类是无法直接访问的。当然私有属性可以通过public修饰的getter和setter方法访问到的,但是私有方法不行。 假设:子类不能够...
  • 父类中的fun()函数调用当前类的print()函数,所以继续查找父类的print()函数,发现该函数访问权限为private,即不能被子类所继承或覆写,所以最终执行父类的print()函数 执行结果:nanjinqin 原因:main函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,994
精华内容 7,997
关键字:

关于子类继承父类说法