Java4Andriod 从零学起 ---learn6

访问权限: 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();

    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值