访问权限: public , protected , default , private
包的导入
package com.owen ;
public class Person{
String name ; //default权限
public int age ; //可以跨包使用
private int grade ; //只能在本类中使用
public void introduce(){
System.out.println("我名字是:"+this.name+", 我的年龄是"+this.age);
}
}
//1. 当用public类时,类名必须和源文件名相同
//2. public 类 -->是公共的,如果不是的话 , 无法从外部包中访问
//3. public 变量或函数 -->是公共的, 如果不是的话 ,无法从外部-包-访问
//4. 跨越包级别访问权限
//1. private 一般情况下只能用于变量或函数(有特殊情况可以用于类)
//2. 被private修饰的函数或变量,只能在包内用,外部-类- 通通无法用 (注意区分public中的3.)
//1. default -->什么都不写即可
//2. default修饰的在同一个包中可以自由使用
//3. 包级别访问权限
/*总结:
public:
|--可以修饰: 类,成员变量,成员函数
|--没有任何限制,同一个包,或者不同包之间自由访问(生成对象的时候要写类的全称)
private:
|--可以修饰: 成员变量,成员函数
|--只能在本类中使用
default(不写权限修饰符,就是default权限)
|--可以修饰: 类,成员变量,成员函数
|--在同一个包当中自由使用
*/
package com.may ;
import com.owen.Person; //导入之后,就不用再写相应的包名了,如p2
import com.owen.*; //导入这个文件夹下所有的.class文件
class Test{
public static void main(String args[]){
//导入之前--------------
com.owen.Person p = null;
p = new com.owen.Person();
// p.name = "Owen"; 不行,因为name为default权限,在外部包中无法被调用
p.age = 10;
//导入之后--------------
Person p2 = new Person();
}
}
---------------------------------------------------
package com.owen;
public class Person{ //如果想被包外面的子类继承,就必须得是public类
public String name ;
protected int age ;
void eat(){
System.out.println("我喜欢吃东西");
}
protected void introduce(){
System.out.println("我的名字叫"+ this.name + " , 我的年龄是"+this.age);
}
}
/*
protected:
1.包含default权限的内容
2.子类 可以在外面的包中对protected权限的 成员变量和成员函数 进行继承和使用
3.protected不能修饰类名
4.protected修饰的变量和函数,只能在外部包中继承,而不能被外部包(非子类)调用
权限总结:
1.public > protected > default > private
2.如果子类和父类不在同一个包当中,子类可以继承到父类的中的default权限的成员变量和成员函数,但是由于权限
不够,无法使用
*/
package org.owen ;
import com.owen.Person; //只要是在不同的包中想用到其他的类,就必须加上这个
class Student extends Person{
int grade ;
public void introduce(){
super.introduce();
System.out.println("我的成绩是"+this.grade);
}
}
/*
-------------------------------------------------------------
E:\java\Java4Android\code\learn6>javac -d . Person.java
E:\java\Java4Android\code\learn6>javac -d . Student.java
Student.java:8: org.owen.Student 中的 introduce() 无法覆盖 com.owen.Person 中的
introduce();正在尝试指定更低的访问权限;为 protected
void introduce(){
^
1 错误
-------------------------------------------------------------
错误原因: 子类重写父类方法时,方法的访问权限必须等于或者大于父类的方法访问权限。
也就是说如果你父类方法用protected修饰,子类则只能用protected和public修饰,不能使用private
*/
/*
1.Student 和 Person 类处于不同的包,他们之间如果想进行继承的话,父类必须是public.
2.同时 父类中的成员变量和成员函数 可以是protected权限
*/
package org.owen;
import org.owen.Student ;
import com.owen.Person ;
class Test{
public static void main(String args []){
Student s1 = new Student();
s1.name = "Owen";
s1.age = 20 ;
s1.grade = 100 ;
s1.introduce();
Person p1 = new Student();
p1.name = "May";
p1.age = 19 ;
p1.grade = 100;
p1.introduce();
Student s2 = (Student)p1;
s2.grade = 100;
s2.introduce();
}
}