主要内容:
1.访问权限与继承
1.该权限首先拥有和default一样的功能(在同一个包可以访问,在不同包内就不能访问),但是该权限只能修饰成员变量和成员函数。
2. 可以跨包继承,如果一个子类要访问父类的成员或函数,就可以将他们声明为protected。
3.public和protected的区别:
public声明的变量,在这个包的外部其他任何一个类都可以访问
protected声明的变量,在这个包的外部只能是子类可以访问
1.访问权限与继承
2.protected权限
如果要在另一个包中被继承,那么被继承的那个类必须为public修饰。
package com.shanl;
class Person{//没有使用public修饰
String name;
int age;
void eat(){
System.out.println("eat");
}
void sleep(){
System.out.println("sleep");
}
}
package com.qing;
import com.shanl.Person;
class Student extends Person{//进行继承的时候会报错
}
运行结果:
shanl@shanl-Aspire-4740:~/Javastudy/src/Package$ javac -d . Person.java
shanl@shanl-Aspire-4740:~/Javastudy/src/Package$ javac -d . Student.java
Student.java:3: com.shanl.Person 在 com.shanl 中不是公共的;无法从外部软件包中对其进行访问
import com.shanl.Person;
^
Student.java:5: 找不到符号
符号: 类 Person
class Student extends Person{
^
如果子类和父类
不在同一个包当中,则子类
无法访问继承到父类当中的default权限的成员变量和成员函数
package com.shanl;
public public class Person{//公共权限
String name; //不是public修饰
int age;
void eat(){
System.out.println("eat");
}
void sleep(){
System.out.println("sleep");
}
}
package com.qing;
import com.shanl.Person;
class Student extends Person{
void introduce(){
System.out.println("我的名字是"+name +"我的年龄为"+age);
}
}
运行:
shanl@shanl-Aspire-4740:~/Javastudy/src/Package$ javac -d . Person.java
shanl@shanl-Aspire-4740:~/Javastudy/src/Package$ javac -d . Student.java
Student.java:7: name 在 com.shanl.Person 中不是公共的;无法从外部软件包中对其进行访问
System.out.println("我的名字是"+name +"我的年龄为"+age);
^
Student.java:7: age 在 com.shanl.Person 中不是公共的;无法从外部软件包中对其进行访问
System.out.println("我的名字是"+name +"我的年龄为"+age);
^
2 错误
protected:
1.该权限首先拥有和default一样的功能(在同一个包可以访问,在不同包内就不能访问),但是该权限只能修饰成员变量和成员函数。
2. 可以跨包继承,如果一个子类要访问父类的成员或函数,就可以将他们声明为protected。
3.public和protected的区别:
public声明的变量,在这个包的外部其他任何一个类都可以访问
protected声明的变量,在这个包的外部只能是子类可以访问
package com.shanl;
public class Person{//公共权限
protected String name;//声明为protected
public int age;//声明为public
void eat(){
System.out.println("eat");
}
void sleep(){
System.out.println("sleep");
}
}
package com.qing;//和Person不在一个类
import com.shanl.Person;
class Test{
public static void main(String args[]){
Person p = new Person();
p.age = 10;//public类型可以访问
p.name = "zhangsan";//protected会报错。
}
}
运行:
shanl@shanl-Aspire-4740:~/Javastudy/src/Package$ javac -d . Person.java
shanl@shanl-Aspire-4740:~/Javastudy/src/Package$ javac -d . Test.java
Test.java:9: name 可以在 com.shanl.Person 中访问 protected
p.name = "zhangsan";
^
1 错误
可以看到不在一个包内的话,protected修饰的变量会报错,无法访问。
权限(从大到小):
public -> protected -> default -> private
原则:面向对象的权限应该尽量的小。