美文网首页
JavaForAndroid10

JavaForAndroid10

作者: tah | 来源:发表于2018-04-24 08:58 被阅读5次

    一、软件包,
    1、定义:将类放置到一个包(文件夹)当中
    格式:package 包名
    一个类的全名是"包名"+"."+"类名"
    2、包名命名规范:
    1)要求包名所有字母都要小写
    2)包名一般情况下是你的域名倒过来写(例:域名marsdroid.org 定义包:package org.marsdroid;)
    e.g.
    package mars;
    class Test {
    public static void main (String args []) {
    System.out.println("Hello package");
    }
    }
    3、编译执行
    编译命令:javac -d . Test.java
    -d 要求编译器依照类的包名来生成相应的文件夹
    . 代表当前目录,将生成的文件夹放到当前目录下,可以将.改成其他目录。
    如果package org.marsdroid;编译后会生成org文件夹,org里面有marsdroid文件夹,marsdroid里面有.class文件
    执行命令:java mars.Test
    注:执行时需要使用类的全名
    package org.marsdroid;编译过后,执行命令为:java org.marsdroid.Test
    4.作用:为Java类提供了命名空间,规定了两个类在不同的命名空间可以重名。

    二、包和访问权限
    1、Java中的访问权限 public > protected > default > private
    public:公共权限;可以修饰类、成员变量和成员函数;没有任何限制,不论是否在同一个包中都可以自有访问
    private:私有权限;可以修饰成员变量和成员函数,在特殊情况下也可以修饰类;只能在本类中访问
    default:包级别访问权限(不写权限修饰符就是default权限);可以修饰类、成员变量和成员函数;在同一个包中,可以自由访问
    protected:受保护权限;首先拥有default一样的功能,但是只能修饰成员变量和成员函数,protected还支持跨包继承

    e.g.Public权限
    //Person.java代码
    package org.marsdroid;
    //使用public类名必须与源文件名统一
    public class Person {
    String name;
    public int age; //可以跨包访问
    public void introduce () {
    System.out.println(name);
    }
    }
    //Test.java代码
    package com.marsdroid;
    class Test {
    public static void main (String args []) {
    //Person和Test不在一个包当中,一个类想访问另一个类,那么另一个类必须是publick权限
    org.marsdroid.Person p = new org.marsdroid.Person();
    //不同包下,想访问属性,则属性必须是public权限
    //p.name = "zhangsan"; 编译报错,name属性不是public权限
    p.age = 10;//正常,age属性是public权限
    p.introduce();
    }
    }

    e.g.Private权限:变量和函数只能在当前类中使用
    //Person.java代码
    package org.marsdroid;
    //使用public类名必须与源文件名统一
    class Person {
    private String name;
    private int age;
    private void introduce () {
    System.out.println(name);
    }
    }
    //Test.java代码
    package org.marsdroid;
    class Test {
    public static void main (String args []) {
    Person p = new Person();
    //p.name = "zhangsan"; //编译报错
    //p.age = 10; //编译报错
    //p.introduce(); //编译报错
    }
    }

    e.g.Default
    //Person.java代码
    package org.marsdroid;
    //使用public类名必须与源文件名统一
    class Person {
    String name;
    int age;
    void introduce () {
    System.out.println(name);
    }
    }
    //Test.java代码
    package com.marsdroid;
    class Test {
    public static void main (String args []) {
    //com.marsdroid.Person p = new com.marsdroid.Person(); //编译报错
    //p.name = "zhangsan"; //编译报错
    //p.age = 10; //编译报错
    //p.introduce(); //编译报错
    }
    }

    三、导入机制
    想使用的类和本类不在同一个包下时,可以使用导入机制
    语法:import 包名.类名; //导入包中的类
    import 包名.*; //导入包中的所有类
    e.g.
    //Person.java代码
    package org.marsdroid;
    //使用public类名必须与源文件名统一
    public class Person {
    public String name;
    public int age;
    public void introduce () {
    System.out.println(name);
    }
    }
    //Test.java代码
    package com.marsdroid;
    import com.marsdroid.Person; //导入com.marsdroid包中的Person类
    class Test {
    public static void main (String args []) {
    Person p = new Person();
    p.name = "zhangsan";
    p.age = 10;
    p.introduce();
    }
    }

    四、访问权限与继承
    如果子类和父类不在同一个包中,则子类无法继承到父类当中的default权限的成员变量和成员函数
    如果子类和父类不在同一个包中,子类可以继承到父类当中的default权限的成员变量和成员函数,但是由于权限不够,无法使用。如需访问必须用public权限。
    e.g.
    //Person.java代码
    package com.marsdroid;
    public class Person {
    String name;
    int age;
    void eat () {
    System.out.println("吃");
    }
    void sleep () {
    System.out.println("睡");
    }
    }

    //Student.java代码
    package org.marsdroid;
    import com.marsdroid.Person;
    class Student extends Person {
    void introduce () {
    //System.out.println("我的名字是"+name+",我的年龄是"+age); //权限问题,编译报错,如果Person中name和age使用private权限,那么也会编译报错
    }
    }

    五、Protected权限
    //Person.java代码
    package com.marsdroid;
    public class Person {
    public String name;
    protected int age;
    protected void eat () {
    System.out.println("吃");
    }
    protected void sleep () {
    System.out.println("睡");
    }
    }

    //Student.java代码
    package org.marsdroid;
    import com.marsdroid.Person;
    class Student extends Person {
    void introduce () {
    System.out.println("我的名字是"+name+",我的年龄是"+age); //正常
    }
    }

    //Test.java代码
    package org.marsdroid;
    import com.marsdroid.Person;
    class Test {
    public static void main (String args []) {
    Person p = new Person();
    p.name = "zhangsan";
    //p.age = 10; //编译报错,protected跨包访问时,只有子类可以访问
    }
    }

    相关文章

      网友评论

          本文标题:JavaForAndroid10

          本文链接:https://www.haomeiwen.com/subject/kephcftx.html