http://bettereveryday.iteye.com/blog/591771

private关键字的定义是“除了包含该成员的类之外,其他任何类都无法访问这个成员.”,也就是说只有自己才能直接访问到private成员,其他任何类,包括子类都无法访问到这个成员。

我们可以来测试一下:

定义两个类,Parent类和Child类

Parent类中有两个方法,一个public方法,一个private方法

Child继承自Parent类

Java代码  
  1. public class Parent {
  2. public void publicMethod(){
  3. System.out.println("hello parent public method");
  4. }
  5. private void privateMethod(){
  6. System.out.println("hello parent private method");
  7. }
  8. }
  9. public class Child extends Parent{
  10. public void publicMethod(){
  11. System.out.println("hello child public method");
  12. }
  13. private void privateMethod(){
  14. System.out.println("hello child private method");
  15. }
  16. public static void main(String args[]){
  17. Parent child = new Child();
  18. child.publicMethod();
  19. //      child.privateMethod(); //若不注释该行代码,则会出现编译错误:“The method privateMethod() from the type Parent is not visible”
  20. }
  21. }
public class Parent {
public void publicMethod(){
System.out.println("hello parent public method");
}
private void privateMethod(){
System.out.println("hello parent private method");
}
}
public class Child extends Parent{
public void publicMethod(){
System.out.println("hello child public method");
}
private void privateMethod(){
System.out.println("hello child private method");
}
public static void main(String args[]){
Parent child = new Child();
child.publicMethod();
//      child.privateMethod(); //若不注释该行代码,则会出现编译错误:“The method privateMethod() from the type Parent is not visible”
}
}

从“// child.privateMethod();”行我们可以看出,父类的private方法是无法被子类覆盖的,因为若能覆盖,则会像覆盖public方法一样,不会出现任何编译错误,而且从错误提示可以看出,“The method privateMethod() from the type Parent is not visible”,也就是“父类的privateMethod()方法(对子类而言)是不可见的”,即子类无法访问父类的private方法。

这个可以从内存角度得到比较好的解释:

我们可以将一个对象的内存分为两部分,一部分继承自父类对象,简称继承内存,一部分是属于自己的,简称自有内存,这就好像一个人的财产一样,一部分是继承自长辈,一部分靠自己打拼。

父类引用指向子类对象,那么该引用指向的其实只是继承内存,它能调用的也就这点内存,这里面包括父类的成员变量,方法等等,父类引用指向的是一个子类对象,但它调用的是父类的privateMethod,但private方法是无法在其他对象中访问到,所以就会产生编译错误。

=============================================

http://blog.csdn.net/cdsnmdl/article/details/3968688

1、方法继承:利用extends关键字一个方法继承另一个方法,而且只能直接继承一个类。
  • 当Sub类和Base类在同一个包时Sub类继承Base类中的public/protected/默认级别的变量个方法
  • 在不同包时继承public/protected级别的变量和方法。
2、方法重载:如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。
  • 方法名相同
  • 方法的参数类型,个数顺序至少有一项不同
  • 方法的返回类型可以不相同
  • 方法的修饰符可以不相同
  • main方法也可以被重载
3、方法覆盖:如果在子类中定义一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法。
  • 子类的方法名称返回类型及参数签名 必须与父类的一致
  • 子类方法不能缩小父类方法的访问权限
  • 子类方法不能抛出比父类方法更多的异常
  • 方法覆盖只存在于子类和父类之间,同一个类中只能重载
  • 父类的静态方法不能被子类覆盖为非静态方法
  • 子类可以定义于父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法(满足覆盖约束),
  • 而且Java虚拟机把静态方法和所属的类绑定,而把实例方法和所属的实例绑定。
  • 父类的非静态方法不能被子类覆盖为静态方法
  • 父类的私有方法不能被子类覆盖
  • 父类的抽象方法可以被子类通过两种途径覆盖(即实现和覆盖)(P169)
  • 父类的非抽象方法可以被覆盖为抽象方法
4、Super关键字:super和this关键字都可以用来覆盖Java语言的默认作用域,使被屏蔽的方法或变量变为可见(三种情况下的不可见P171)。
  • 父类的成员变量和方法为private使用super访问编译出错
  • 在类的构造方法种,通过super语句调用这个类的父类的构造方法
  • 在子类种访问父类的被屏蔽的方法和属性
  • 只能在构造方法或实例方法内使用super关键字,而在静态方法和静态代码块内不能使用super
5、多态:
  • 对于一个引用类型的变量,Java编译器按照它的声明的类型来处理
  • 对于一个引用类型的变量,运行时Java虚拟机按照它的实际引用的对象来处理
  • 运行时环境中,通过引用类型变量来访问所引用对象的方法和属性时,Java虚拟机采用以下绑定规则
1)实例方法与引用变量实际引用的对象的方法绑定,属于动态绑定
2)静态方法与引用变量所声明的类型的方法绑定,属于静态绑定
3)成员变量(包括静态和实例变量)与引用变量所声明的类型的成员变量绑定,属于静态绑定                                                                                                               
6、继承的利弊和使用原则:
  • 集成数的层次不可太多
  • 集成数的上层为抽象层
(1)定义了下层子类都用友的相同属性和方法,并且尽可能默认实现,从而提高重用性
(2)代表系统的接口,描述系统所能提供的服务
  • 继承关系最大的弱点:打破封装
  • 精心设计专门用于被继承的类
(1)对这些类必须提供良好的文档说明
(2)尽可能的封装父类的实现细节,把代表时间细节的属性和方法定义为private类型
(3)如果某些实现细节必须被子类访问,定义为protected类型
(4)把不允许子类覆盖的方法定义为final类型
(5)父类的构造方法不允许调用可被子类覆盖的方法
(6)如果某些类不是专门为了继承而设计,那么随意继承它是不安全的

子类能否访问或覆盖父类的private方法相关推荐

  1. 子类不能继承或覆盖父类的private方法

    题目:如果现在父类的一个方法定义成private访问权限,在子类中将此方法声明为default访问权限,那么这样还叫重写吗? 答:不是.因为private关键字的定义是"除了包含该成员的类之 ...

  2. A 子类继承父类,子类的构造函数会覆盖父类的构造函数

    //子类 没有定义 构造 函数时,默认继承父类的构造方法:输出结果为 Class A... // 子类 定义了 构造 函数时,就不会继承父类的构造方法:输出结果是  Class B... <?p ...

  3. Java中子类覆盖父类方法所必须满足的条件

    因为太喜欢,所以转来,侵删! 参考自:http://www.it165.net/pro/html/201504/39284.html 一.描述 子类重写(覆盖)父类的方法必须满足的条件: 1.父类中的 ...

  4. java不能覆盖父类的_java中子类覆盖父类方法所必须满足的条件

    一.描述 子类重写(覆盖)父类的方法必须满足的条件: 1.父类中的方法在子类中必须可见,即子类继承了父类中的该方法(可以显式的使用super关键字来访问父类中的被重写的方法), 如果父类中的方法为pr ...

  5. c 子类对象 访问父类对象受保护成员_06-JavaSe面向对象

    一.static 1.它是一种修饰符 2.使用位置:它用来修饰成员变量和成员方法 static修饰成员变量,叫类变量: static修饰成员方法,叫类方法: 类成员=类变量+类方法 没有使用stati ...

  6. 禁止 Python 子类覆盖父类方法

    当实现我们自己的父类Animal的时候,由于meta.has_base为 False,所以不会触发检查逻辑.但当我们基于Animal实现Dog子类的时候,由于meta.has_base是True,所以 ...

  7. python中子类调用父类的初始化方法

    http://bestchenwu.iteye.com/blog/1044848 http://www.crazyant.net/1303.html 一直不太理解python的初始化方法,今天找了下资 ...

  8. C++类中的访问权限问题---public/protected/private

    派生类继承了基类的全部数据成员和除了构造.析构函数之外的全部成员函数,但是这些成员的访问属性在派生的过程中通过继承方式可以来调整. 第一:private,public,protected方法的访问范围 ...

  9. Java10-day01【继承(变量-构造方法访问-成员方法 访问)、super内存图、方法重写、继承、包、import、权限修饰符、final、static】

    视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java ...

最新文章

  1. 使用Fiddler进行HTTP流量分析
  2. Eclipse SDK构建J2EE开发环境
  3. php调http接口,2步教你解决http协议php接口调用
  4. [Qt教程] 第46篇 进阶(六) 国际化
  5. 计算机cup容量有什么作用,电脑的cpu和内存条都起什么作用
  6. 如何解决秒杀的性能问题和超卖的讨论
  7. 快速上手,使用 Kotlin 把支付宝小程序装进自己的 App
  8. linux操作系统网络,网络安装linux操作系统
  9. java jdbc 回滚_java_详解Java的JDBC API中事务的提交和回滚,如果JDBC连接是在自动提交模式 - phpStudy...
  10. Executors 线程池的7个参数详解
  11. cognos transformer 建一个85w数据的cube所用的时间,接优化
  12. Python资源大全
  13. 利用Matlab求解函数导数并绘图
  14. Java文件上传同时携带参数
  15. 资治通鉴-5 商鞅的得与失
  16. [Irving]SqlServer 标量函数 详解【转】
  17. 使用云服务器搭建Linux学习环境
  18. mysql密码认证插件_关于mysql:无法加载身份验证插件’caching_sha2_password’
  19. 嵌入式跑马灯实验报告linux,ARM嵌入式跑马灯设计实验报告.doc
  20. 需求治理如何实施(二)

热门文章

  1. 下列叙述正确的是( )
  2. Java中集合(七)Collections 一个操作集合的工具类
  3. 【机器视觉】 dev_set_colored算子
  4. 【MFC】MFC对话框类
  5. 【Protocol Buffer】Protocol Buffer入门教程(六):枚举和包
  6. 【Android】ContentProvider和Uri详解
  7. [Qt教程] 第26篇 数据库(六)SQL关系表格模型QSqlRelationalTableModel
  8. python开源爬虫项目违法吗_Python开源爬虫项目代码:抓取淘宝、京东、QQ、知网数据...
  9. socket连接时间太长受什么原因影响?_真全粮多功能酿酒设备-酿酒发酵前期为什么要通风处理?...
  10. 每天一道LeetCode-----计算小于n的素数个数