加载中...
加载中...
总结protected访问权限

总结protected访问权限 原创

总结protected访问
1. 不能通过父类SuperClass对象实例访问父类的protected方法或成员变量,在子类InvokeSuperMethod中也是不可以的。
2. 子类中可以通过子类InvokeSuperMethod对象实例调用父类SuperClass的protected方法或成员变量。
3. 子类中可以通过super调用父类SuperClass的protected方法或成员变量。
4. 非子类中无论如何是不能调用一个类的protected方法或成员变量,实例化子类也是不可以的。
  

说明:上述SuperClass是父类,InvokeSuperMethod是子类


this与 super

this
1. 表示当前这个对象,是指向对象本身的一个指针。
2. 可以表示构造函数传递。this(a,b)表示调用另外一个构造函数(被调用的那个构造函数必须放在代码的第一行)。这里面的this就是一个特殊语法,不是变量,也没有什么类型。
3. 可以在一个类的非static方法中使用,this不能在main方法(静态的)当中被使用。
super
1. 表示调用父类的构造函数(被调用的那个构造函数必须放在代码的第一行)。是一个特殊语法,不是变量,也没有什么类型。
2. 可以在一个类的非static方法中使用。比如super.protectedMethod()。super不能在main方法(静态的)当中被使用。
3. 可以通过super调用父类的protected方法或成员变量。

方法的
1. 当只有父类有,子类没有的情况下,则调的是父类的(因为子类继承了父类,子类就拥有了父类出了私有外的所有东西)
2. 当父类和子类都有的情况下,默认调用的是子类的,但是用super标明了以后调的是父类的.
3. 在子类的构造函数里都必须去调用父类的构造函数,你不写其实第一行都有一个隐式的super();

protected 访问权限

1。在同包子访问的protected方法或成员变量肯定是可以的。


2。在不同包子访问的protected方法或成员变
1. 在类SuperClass包外是不能通过该类SuperClass对象实例进行访问的,即便在该类的子类InvokeSuperMethod中也不可这么做;
2. 在该类SuperClass包外的子类InvokeSuperMethod中能访问的只是子类自己继承来的protected方法或成员变量,所以可以使用子类实例来访问;
3. 可以通过super调用父类的protected方法或成员变量;

3。在不同包非子中通过实例化子,通访问的protected方法或成员变量,是不行的。

写个demo测试一下

父类

复制收展Javapackage com.test.clas;

/**
* @Desc -累行客
* @Author luolei
* @Web http://www.leixingke.com/
* @Date 2020/08/07 08:47
*/
public class SuperClass {

protected String protectedField="父类 protected 变量";

protected void protectedMethod(){
System.out.println("父类 protected 方法");
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

子类中调用父类protected方法或成员变量

复制收展Javapackage com.test.clas.protect;

import com.test.clas.SuperClass;

/**
* @Desc -累行客
* @Author luolei
* @Web http://www.leixingke.com/
* @Date 2020/08/07 08:50
* @总结protected访问权限
* 1. 不能通过父类SuperClass对象实例访问父类的protected方法或成员变量,在子类InvokeSuperMethod中也是不可以的。
* 2. 子类中可以通过子类InvokeSuperMethod对象实例调用父类SuperClass的protected方法或成员变量。
* 3. 子类中可以通过super调用父类SuperClass的protected方法或成员变量。
* 4. 非子类中无论如何是不能调用一个类的protected方法或成员变量,实例化子类也是不可以的。
*
*/
public class InvokeSuperMethod extends SuperClass {

public static void main(String[] args) {

InvokeSuperMethod invokeSuperMethod = new InvokeSuperMethod();
invokeSuperMethod.protectedMethod();
System.out.println(invokeSuperMethod.protectedField);

invokeSuperMethod.method();

}

public void method(){
super.protectedMethod();
System.out.println(super.protectedField);

/*SuperClass superClass = new SuperClass();
//编译错误
superClass.protectedMethod();
//编译错误
System.out.println(superClass.protectedField);*/
}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

普通类中实例化子类调用父类protected方法或成员变量

复制收展Javapackage com.test.clas.protect;

/**
* @Desc -累行客
* @Author luolei
* @Web http://www.leixingke.com/
* @Date 2020/08/07 09:53
*/
public class InvokeProtected {

public static void main(String[] args) {

//3在不同包非子类中通过实例化子类,通过子类实例访问父类的protected方法或成员变量,是不行的。
InvokeSuperMethod invokeSuperMethod = new InvokeSuperMethod();
//编译失败
/*invokeSuperMethod.protectedMethod();
System.out.println(invokeSuperMethod.protectedField);*/

}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20


没有更多推荐了 [去首页]
image
文章
376
原创
293
转载
83
翻译
0
访问量
183398
喜欢
73
粉丝
5
码龄
7年
资源
3

文章目录

加载中...
0
0