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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wy_heima 中级黑马   /  2014-5-21 01:38  /  4687 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

私有方法能被子类继承吗?

21 个回复

倒序浏览
1.子类继承父类的成员变量,包括实例成员变量和类成员变量。
回复 使用道具 举报
1.子类继承父类的成员变量,包括实例成员变量和类成员变量。
2.子类继承父类构造方法以外的方法,包括实例成员方法和类成员方法。
3.子类不能继承父类的构造方法。因为父内构造方法创建的是父类对象,子内必须声明自己的构造方法,创建子类自己的对象
4.子类能够继承父内的析构方法
5.子类可以增加自己的成员变量和方法
6.子类不能删除父内成员
7.子类可以重定以父类成员,隐藏父内的成员变量,覆盖父类的成员方法
回复 使用道具 举报
应该是可以的!
回复 使用道具 举报
可以从字面上理解啊,私有,是自己所独有的,别人不过怎样应该是获取不到的吧,所以可以理解为一个类不管是私有属性和方法,都不能被子类所继承的!
回复 使用道具 举报
private 的方法是不能被子类继承的
protected的方法可以被子类继承
回复 使用道具 举报
父类的私有方法不能被子类覆盖

//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都不能重载。
回复 使用道具 举报
晕 楼上的几位误导别人 不知道就别瞎说啊  父类私有的属性肯定是被子类继承了 只是子类访问不到而已   别看一些老师的视频    多看看书  比如JAVA编程思想等  那上面说的很详细   我在说一遍  私有的属性被子类继承了 只是因为私有 所有访问不到
回复 使用道具 举报
沙漠里的小鱼 发表于 2014-5-21 21:13
晕 楼上的几位误导别人 不知道就别瞎说啊  父类私有的属性肯定是被子类继承了 只是子类访问不到而已   别看 ...

大神,楼主问的貌似是方法。。。
回复 使用道具 举报
私有方法是不能被继承的,凡是私有的只能在本类中访问。
回复 使用道具 举报
不能,可以理解为私有就是为了不被子类继承,当成特例来记忆  会记得很牢
回复 使用道具 举报
子类无法继承父类的private的方法
回复 使用道具 举报
通过简单的程序来验证子类无法继承父类的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:33
14#
不能,父类中的私有方法和属性不能被继承,设置为私有的目的就是为了代码的安全性,不被破坏
回复 使用道具 举报
我该相信谁呢?谁能给一个准确的答案?
回复 使用道具 举报
pancl 中级黑马 2014-5-22 11:25:14
16#
不管是谁说的对,最终造成的结果是一致的。就是子类对象五法使用父类的private方法!private关键字就说明是私有,能被别人拿去用还是私有吗?8楼说的内部思想应该是对的
回复 使用道具 举报
私有,就只属于他自己的。
回复 使用道具 举报
肯定是会被子类继承的   但是因为是被私有了   子类不能访问而已   
当时这个问题我也问过老师   老师说 学到反射的时候就可以了
回复 使用道具 举报
Wokno 中级黑马 2014-5-22 18:13:43
19#
同意8楼的,子类继承超类的所有东西,但有一些东西在超类内部定义为私有的话,子类继承了但是却不能使用。简单说就是拥有这个东西的所有权,但无使用权。。。
回复 使用道具 举报
private 修饰的只能本类调用,这是java的封装特性。为了保证数据的安全性。如果要给其他类访问,最好通过设置get() set()方法
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马