黑马程序员技术交流社区

标题: 私有方法能被子类继承吗? [打印本页]

作者: wy_heima    时间: 2014-5-21 01:38
标题: 私有方法能被子类继承吗?
私有方法能被子类继承吗?
作者: lvc    时间: 2014-5-21 06:39
1.子类继承父类的成员变量,包括实例成员变量和类成员变量。
作者: lvc    时间: 2014-5-21 06:46
1.子类继承父类的成员变量,包括实例成员变量和类成员变量。
2.子类继承父类构造方法以外的方法,包括实例成员方法和类成员方法。
3.子类不能继承父类的构造方法。因为父内构造方法创建的是父类对象,子内必须声明自己的构造方法,创建子类自己的对象
4.子类能够继承父内的析构方法
5.子类可以增加自己的成员变量和方法
6.子类不能删除父内成员
7.子类可以重定以父类成员,隐藏父内的成员变量,覆盖父类的成员方法
作者: 李小新H    时间: 2014-5-21 08:02
应该是可以的!
作者: 喜爱    时间: 2014-5-21 08:19
可以从字面上理解啊,私有,是自己所独有的,别人不过怎样应该是获取不到的吧,所以可以理解为一个类不管是私有属性和方法,都不能被子类所继承的!
作者: 屈_zi    时间: 2014-5-21 10:06
private 的方法是不能被子类继承的
protected的方法可以被子类继承
作者: liang090214    时间: 2014-5-21 21:08
父类的私有方法不能被子类覆盖

//Sub.java  ,例程1  
class Base
{
private String showMe()
{
  return "Base";
}
public void print()
{
  System.out.print(showMe());//调用谁的showMe()方法呢?
}
}
class Sub extends Base
{
public String showMe()
{
  return "Sub";
}
public static void main(String[] args)
{
  Sub sub=new Sub();
  sub.print();
}
}

从例程中我们可以看到,在父类Base中定义了一private访问权限的showMe()方法,在子类Sub中又定义了public访问权限的showMe()方法。
运行这个例程,得到的打印结果是“Base”。
同样,我们将例程做些修改:将Base类的showMe()方法的访问权限改为public,即:
//Sub.java  ,例程2
class Base
{
public String showMe()
{
  return "Base";
}
public void print()
{
  System.out.print(showMe());
}
}
class Sub extends Base
{
public String showMe()
{
  return "Sub";
}
public static void main(String[] args)
{
  Sub sub=new Sub();
  sub.print();
}
}
再次运行例程,得到的打印结果是“Sub”。

两次结果不一致,很显然是private在作怪,对!一开始我就提到了这点:父类的私有方法不能被子类覆盖。

在例程2中,sub.print()所调用的是自己的showMe()方法,此时,Sub类的showMe()方法已覆盖了父类的方法,所以在Sub类中继承Base类的print()方法所调用的就是自己的showMe()方法。

而在例程1中,Sub类的showMe()方法并不能覆盖父类Base的showMe()方法,这两个showMe()方法之间并不存在覆盖关系。此时先要明白一点:print()方法是在Base类中定义的,所以当执行sub.print()这句代码时,JVM首先在sub实例对象时无法找到匹配的showMe()方法,所以就直接调用其父类的showMe()方法。然而在例程2中,Sub类的showMe()方法已覆盖其父类的相应方法,所以JVM在sub实例对象里找到了相匹配的自己的showMe()方法,所以调用其来执行,不再调用父类的方法。
不光是private的方法不能重载,static, final都不能重载。
作者: 沙漠里的小鱼    时间: 2014-5-21 21:13
晕 楼上的几位误导别人 不知道就别瞎说啊  父类私有的属性肯定是被子类继承了 只是子类访问不到而已   别看一些老师的视频    多看看书  比如JAVA编程思想等  那上面说的很详细   我在说一遍  私有的属性被子类继承了 只是因为私有 所有访问不到
作者: liang090214    时间: 2014-5-21 21:29
沙漠里的小鱼 发表于 2014-5-21 21:13
晕 楼上的几位误导别人 不知道就别瞎说啊  父类私有的属性肯定是被子类继承了 只是子类访问不到而已   别看 ...

大神,楼主问的貌似是方法。。。
作者: 谜燕    时间: 2014-5-21 21:47
私有方法是不能被继承的,凡是私有的只能在本类中访问。
作者: 凌羽猎风    时间: 2014-5-21 22:20
不能,可以理解为私有就是为了不被子类继承,当成特例来记忆  会记得很牢
作者: 提菩--空    时间: 2014-5-21 22:48
子类无法继承父类的private的方法
作者: hamiguadjs    时间: 2014-5-22 00:43
通过简单的程序来验证子类无法继承父类的private的方法。
  1. class Fu {
  2.         int num = 10;
  3.         private int num2 = 20;

  4.         public void show(){
  5.                 System.out.println("Fu show");
  6.         }
  7.         private void method(){
  8.                 System.out.println("Fu1 show");
  9.         }
  10. }

  11. class Zi extends Fu {

  12. }

  13. class ExetendsDemo {
  14.         public static void main(String[] args){
  15.                 Zi z = new Zi();
  16.                 System.out.println(z.num);
  17.                 //System.out.println(z.num2);//错误: num2可以在Fu中访问private
  18.                 z.show();
  19.                 z.method();
  20.         }
  21. }
复制代码

通过以上程序可知,在子类创建的对象在访问private修饰的成员时,程序都会报错,经验证,私有成员是不能被子类所访问的,你可以直接复制此程序进行验证。
进一步说明:继承的特点:子类可以直接访问父类中的非私有的属性和行为。
作者: More    时间: 2014-5-22 09:17
不能,父类中的私有方法和属性不能被继承,设置为私有的目的就是为了代码的安全性,不被破坏
作者: wy_heima    时间: 2014-5-22 10:05
我该相信谁呢?谁能给一个准确的答案?
作者: pancl    时间: 2014-5-22 11:25
不管是谁说的对,最终造成的结果是一致的。就是子类对象五法使用父类的private方法!private关键字就说明是私有,能被别人拿去用还是私有吗?8楼说的内部思想应该是对的
作者: 闫镜湾    时间: 2014-5-22 11:54
私有,就只属于他自己的。
作者: 寻找人生目标    时间: 2014-5-22 14:21
肯定是会被子类继承的   但是因为是被私有了   子类不能访问而已   
当时这个问题我也问过老师   老师说 学到反射的时候就可以了
作者: Wokno    时间: 2014-5-22 18:13
同意8楼的,子类继承超类的所有东西,但有一些东西在超类内部定义为私有的话,子类继承了但是却不能使用。简单说就是拥有这个东西的所有权,但无使用权。。。
作者: 邵镛    时间: 2014-5-22 18:31
private 修饰的只能本类调用,这是java的封装特性。为了保证数据的安全性。如果要给其他类访问,最好通过设置get() set()方法
作者: shi980088    时间: 2014-5-22 19:15
私有方法是不可以被子类继承的。因为把方法私有的话子类继承父类,子类不能访问父类的私有方法。定义成私有的成员变量和方法只有在同一个类中才能访问(内部类特殊,因为内部类是写在这个类里面,所以内部类可以访问外部类的私有成员)
作者: Dark_Horse    时间: 2014-5-22 19:20
不可以的....




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2