A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币
Java中的子类会继承父类的所有成员吗?包括私有的 和静态...

最佳答案

查看完整内容

class Person //父类 { public Person() { } } class Man extends Person //子类 { public Man() { } } 类Man继承于Person类,这样一来的话,Person类称为父类(基类),Man类称为子类(导出类)。如果两个类存在继承关系,则子类会自动继承父类的方法和变量,在子类中可以调用父类的方法和变量。在java中,只允许单继承,也就是说 一个类最多只能显示地继承于一个父类。但是一个 ...

51 个回复

倒序浏览
class Person //父类
{
       public Person()
        {
        }
}
class Man extends Person  //子类
{
       public Man()
        {
        }
}

类Man继承于Person类,这样一来的话,Person类称为父类(基类),Man类称为子类(导出类)。如果两个类存在继承关系,则子类会自动继承父类的方法和变量,在子类中可以调用父类的方法和变量。在java中,只允许单继承,也就是说 一个类最多只能显示地继承于一个父类。但是一个类却可以被多个类继承,也就是说一个类可以拥有多个子类。(比如说一个儿子只能有一个亲生父亲,一个父亲可以有很多个儿子)

1.子类继承父类的成员变量
  当子类继承了某个类之后,便可以使用父类中的成员变量,但是并不是完全继承父类的所有成员变量。具体的原则如下:
  1)能够继承父类的public和protected成员变量;不能够继承父类的private成员变量;
  2)对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
  3)对于子类可以继承的父类成员变量,如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。
  2.子类继承父类的方法
  同样地,子类也并不是完全继承父类的所有方法。
  1)能够继承父类的public和protected成员方法;不能够继承父类的private成员方法;
  2)对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承;
  3)对于子类可以继承的父类成员方法,如果在子类中出现了同名称的成员方法,则称为覆盖,即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
回复 使用道具 举报
会继承,但是私有对子类不可见,不可直接访问。
回复 使用道具 举报
私有private的方法与属性不可继承,可以通过调用继承自父类中的非私有方法进行访问。
回复 使用道具 举报
子类对象拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用
静态方法和静态变量是属于类的,所以子类可以调用父类的静态方法
回复 使用道具 举报
子类可以调用父类除private之外的所有东西,包括构造函数,和静态。要想访问private需要通过父类中的get跟set变量方法,这个方法需要自己实现,或者用反射实现。
回复 使用道具 举报
私有的    子类 不能用
回复 使用道具 举报
子类会继承父类私有的成员. 静态的成员是跟着父类存在于内存的方法区中的静态区域; 所以, 静态成员不被继承,但会被其所在的类,以及子父类所对应的对象来调用.
回复 使用道具 举报
继承是全部继承,当对于私有的并不具有访问权限,只能通过父类的公有方法进行访问。
回复 使用道具 举报
都继承,父类中私有的成员子类不能直接访问,要通过父类提供的公共方法才能访问
回复 使用道具 举报
开弓没有回头箭 发表于 2015-6-4 17:28
都继承,父类中私有的成员子类不能直接访问,要通过父类提供的公共方法才能访问 ...

私有和公共的静态成员也继承吗?
回复 使用道具 举报
本帖最后由 开弓没有回头箭 于 2015-6-4 18:18 编辑

静态成员也一样继承,父类私有静态成员的要通过父类名才能访问,
回复 使用道具 举报
Enhon1992 发表于 2015-6-4 17:47
私有和公共的静态成员也继承吗?

静态成员也一样继承,父类私有静态成员的要通过父类名才能访问,
回复 使用道具 举报
路途遥远 发表于 2015-6-4 17:16
子类会继承父类私有的成员. 静态的成员是跟着父类存在于内存的方法区中的静态区域; 所以, 静态成员不被继承 ...

你的意思是静态的不能被继承  怎么有人说:<继承是全部继承,当对于私有的并不具有访问权限,只能通过父类的公有方法进行访问。>  不知道哪个是对的
回复 使用道具 举报
私有的不能继承啊,protected不就是只给子类用的吗?
回复 使用道具 举报
Enhon1992 发表于 2015-6-4 20:05
你的意思是静态的不能被继承  怎么有人说:  不知道哪个是对的
  1.                 public static void main(String args[])
  2.                 {
  3.                         System.out.println(aaa.i);
  4.                 }
  5.         static class bbb{
  6.                 public static int i=0;
  7.                         // TODO Auto-generated method stub
  8.         }
  9.         static class aaa extends bbb//继承了bbb类中的静态成员i
  10.         {}
复制代码

用代码说明问题,静态成员是可继承的,程序结果输出0
回复 使用道具 举报
Enhon1992 发表于 2015-6-4 20:05
你的意思是静态的不能被继承  怎么有人说:  不知道哪个是对的

这块是有点绕。我写代码试了一下,证明能继承
class Father{
        static int m = 1;
        static void show() {
        System.out.println("Father");
}
}

class Son extends Father {
        public void showSon() {

}
}

public class Test{
        public static void main(String[] args) {
        Son.show();
        Father.show();
}
}

运行结果:
Father
Father
回复 使用道具 举报
本帖最后由 路途遥远 于 2015-6-4 21:13 编辑
Enhon1992 发表于 2015-6-4 20:05
你的意思是静态的不能被继承  怎么有人说:  不知道哪个是对的

这块是有点绕。我写代码试了一下,证明能继承
  1. class Father{
  2.         static int m = 1;
  3.         static void show() {
  4.         System.out.println("Father");
  5. }
  6. }

  7. class Son extends Father {
  8.         public void showSon() {

  9. }
  10. }

  11. public class Test{
  12.         public static void main(String[] args) {
  13.         Son.show();
  14.         Father.show();
  15. }
  16. }
复制代码
运行结果:
Father
Father
回复 使用道具 举报
kikt 发表于 2015-6-4 21:29
私有的字段不能被继承,至于通过父类的共有方法来访问和是否是子类无关
其他的类也可以通过父类的共有方 ...

静态成员会被继承吗?
回复 使用道具 举报
private方法:子类成员能继承父类private修饰的成员,但子类成员不能方法。
  1. class PrivateDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Father f = new Father();//建立父类对象
  6.                 Son s = new Son();//建立子类对象
  7.                 System.out.println(s.name);//打印子类从父类继承的成员name
  8.         }
  9. }
  10. class Father
  11. {
  12.         private String name = "张三";
  13. }
  14. class Son extends Father
  15. {
  16.         //这里继承了父类的Private成员name
  17. }
  18. /*
  19. 程序编译会出现以下结果:
  20. PrivateDemo.java:7:错误:name可以在Father中访问private
  21. 原因:子类在这里是可以继承父类的私有化成员,但一旦子类想要调用这个成员,就必须要
  22. 进入父类中,此时由于被私有化的不能被外部类访问,所以会失败。
  23. 解决方法:将private修饰符改成用protected修饰,这样子类继承后就可以访问了。
  24. */
复制代码
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马