包和访问权限(3)

主要内容:
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
原则:面向对象的权限应该尽量的小





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值