子类如何调用父类private修饰的属性或方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子类如何调用父类private修饰的属性或方法?相关的知识,希望对你有一定的参考价值。
在JAVA中,子类是无法继承父类的private修饰的属性和方法的,也就是说子类继承了父类,却没有继承其用private修饰的属性和方法,就无法调用了。这有利于在开发过程中保护父类的某种属性和方法不被覆盖需要注意的是:使用了private修饰的属性和方法,默认使用final修饰,也就是说使用了private修饰的属性,是一个常量,第一次加载初始化后就不能够更改!
希望满意,谢谢! 参考技术A 私有属性不能被继承或覆盖,当子类调用方法getlevel方法时,实际调用的是父类的方法(getlevel()等同于super.getlevel()),而父类的getlevel方法只能调用自己的属性,返回是false。另外,即使level不是私有属性,
,返回的依然是false,因为父类不能访问子类的属性。
--------------------------------------------------------------------------------------------------------------
补充说明:
调用自身的属性或方法,用this.方法或属性;
调用父类的属性或方法,用super.方法或属性;
属性或方法调用没有前缀时,jvm优先检查自身是否有该属性或方法,有访问自身,没有访问父类。
私用属性或方法不能在类外被访问;私用属性或方法不能被子类继承或者覆盖(重写)。
面向对象基础
1.1 封装
1.2 继承(extends)
1.2.1 父类
1.2.2 子类
1.子类在同一个包下面能够范文父类除了私有private修饰的所有属性和方法
2.在不同包下面,子类对象只能访问public修饰的属性和方法
3.在子类内部,如果不同包的情况下,可以访问protected修饰的属性和方法,但是不能访问默认的访问修饰符修饰的属性和方法
4.子类在初始化的时候会先调用父类的默认不带参数构造器,如果没有,就会报错,我们只有人为的修改
(1).将父类添加一个无参数的构造器
(2).在子类构造器中手动使用super()声明调用哪个父类的构造器
1.3 多态
2. 类
2.1属性,成员变量,全局变量
当对象初始化之后,成员变量就会有初始值
String null 整型 0 浮点型 0.0 boolean false char (char)0
局部变量
1.定义的位置不一样 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中
2.作用范围不一样 局部变量:只有方法当中才可以使用,出了方法就不能再用 成员变量:整个类全都可以通用。
3.默认值不一样 局部变量:没有默认值,如果想要使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则和数组一样
4.内存的位置不一样 局部变量:位于栈内存 成员变量,位于堆内存。
5.生命周期不一样 局部变量:随着方法进栈而诞生,随着方法出栈而死亡。 成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失。
2.2 行为,动作,函数,方法
所有和动作相关的,都应该放入到方法中
2.3通过类创建对象 new
3. 对象
对象是类的实例
也都具有属性和方法
对象都是属于某个类
一切皆对象
注意:对象是 new XXX(),而不是具体的哪个名字,名字只是一个引用
3.1对象数组
Book [] books = new Book[50];
4.重要的知识点
4.1 成员变量与局部变量的区别
The local variable type may not have been initialized 局部变量还没有被赋值
成员变量当对象初始化的时候会自动给上初始值
局部变量不会自动给初始值
如果要给成员变量赋初始值,就只能写在一行,不能再另外一行重新赋值
4.2 重载(overload)
就是为了少写方法名,同样的方法名,只要参数不一样,就可以执行不同的操作
在同一个类中
方法名一样
参数不一样 1.参数类型不一样 2.参数个数不一样 3.参数的顺序不一样(不同类型的顺序)
4.3 重写(override)
1.继承
2.子类重写父类的方法
3.方法名一样
4.参数类型,参数个数一样
5.返回值一样
6.注意父类private修饰的方法,子类不能重写
7.子类重写方法的访问修饰符可见度,必须必父类方法的访问修饰符可见度高
8.注意:如果只是方法名一样,参数不一样,这个样子是一个子类的重载而已
4.4 构造方法(构造器,构造函数)
构造器: 构造器必须和当前的类名相同,因此构造器不能继承!
1.每个类都默认有构造器
2.默认构造方法就是一个无参数的,没有任何函数体的方法
3.自己手动写构造方法
4.构造方法格式: 访问修饰符 类名([参数...参数]){}
5.构造方法可以重载
6.如果我们手动写了一个带参数的构造器,会自动的覆盖系统自带的默认构造器
7.习惯:如果手动添加了一个带参数的构造器,最好写一个无参数的构造器
注意: 在new子集的时候会先调用父集的无参数的构造器,带参数的构造器不会自动调用
4.5 javabean
所有的属性都是private
为每个属性建立setter和getter方法 (快捷键:shift + alt + s)
这个其实就是为了以后装数据用的一个类
4.6 对象转型
向上转型
向下转型
转型需要的条件:
1.继承关系
2.要有相互引用的关系
3.查看内存图形
5. 关键字
5.1 this
代表当前对象本身
有时候需要把当前调用对象进行传递,那么就可以使用this替代当前调用对象
在构造器中可以使用this([参数])调用本类的其他构造器
5.2 super
指代父类
super() 调用父类的构造器
super()如果放在子类中调用,只能放在子类构造器代码的第一行
5.3 new
只要使用new关键字,就是创建一个新的对象
要注意一个问题.不要觉得有时候参数需要一个对象,就直接new 一个对象传过去
5.4 static
1.静态的属性和静态的方法属于整个类
2.静态的值只有一个(基本数据类型可以看出此特点)
3.静态的值只会初始化一次(引用数据类型)
4.静态属性,方法或者静态块会在jvm加载的时候就加载
5.静态变量不能加在方法里面
6.静态方法不能重写
一般情况下,静态的常量属性,我们一般写为 public static final 数据类型 大写常量名 = 值
5.5 instanceof
判断某个对象是不是某一个类型
5.6 final
1.可以用来修饰变量,如果修饰变量,这个变量我们就称之为常量,值不能被修改,而且常量必须赋初始值,一般情况下,常量我们会定义为 public static final 数据类型 大写常量名 = 值
2.如果final修饰方法,表示这个方法不能被重写(实现)
3.如果final修饰类,表示这个类不能被继承
5.7 Object
所有类的父类
6 .类和类的关系
组合(has-a):一个类是另一个类的属性
依赖(user-a):一个类是另外一个类方法的参数
7 .抽象类(abstract)
1.抽象方法一定在抽象类中
2.抽象类和抽象方法肯定是被abstract修饰的
3.抽象类不可以用new关键字实例化,实例化一个抽象类没有任何意义
4.如果一定要用抽象类,那么可以使用多态的方式
5.虽然抽象类不能实例化,但是也是有构造器的
6.抽象方法不能被private修饰
7.抽象方法不能被static修饰
总结:1.抽象类就是用来被继承的 2.抽象方法就是用来被实现的 3.实现多态
8. 接口(interface implements)
1.接口中的变量全部是静态常量
2.接口中的方法默认是抽象方法
3.JDK1.8之后可以手动声明默认方法和静态方法
4.接口可以多实现,一个类可以实现多个接口
5.接口与接口之间使用extends
以上是关于子类如何调用父类private修饰的属性或方法?的主要内容,如果未能解决你的问题,请参考以下文章
public private protected 修饰符整理