北大慕课Java程序设计【四】类、包、接口(下)

目录

一、访问控制符

1. 修饰符

2. 成员的访问控制符(权限修饰符)

3. 类的访问控制符

4. setter 和 getter 及其优势

二、其他修饰符

1. 三种其他修饰符的含义及应用对象

2. static 的使用

3. final 的使用

4. abstract 的使用

三、接口

1. 接口的概念

2. 接口的作用

3. 接口的定义与类型

4. 枚举(从 JDK 1.5 起)

5. 接口中的常量

四、语法小结

1. 完整的类的定义

2. 完整的接口的定义

3. 三种要求固定声明方式的方法

4. 完整的 Java 源文件


一、访问控制符

1. 修饰符

→ 修饰符(modifiers)分为两类,可以修饰类及其成员(字段、方法)

① 访问修饰符:public,private 等等

② 其他修饰符:abstract

2. 成员的访问控制符(权限修饰符)

在同一个类中 在同一个包中 不同包中的子类 不同包中的非子类
private
默认(包可访问)
protected
public

【举例】下面的例子中文件结构如下:

tree
.
├── Derived1.java
├── Main.java
└── pkg
    ├── Test.java
    └── pkg1
        └── Test1.java

2 directories, 4 files

为清晰起见,绘制 UML 图如下(图中有些类,如 Group 将在后面的笔记中出现):

 代码及注释如下:

→ Main.java 中的 Base 类和 Derived 类:

class Base {
    // 不能写 public class Base 因为文件名不是 base.java
    private int a = 1;
    int b = 2;
    protected int c = 3;
    public int d = 4;

    Base() {
        System.out.println("Base initialized.");
        System.out.println("this.a = " + this.a); // 同一个类中可以访问的字段
    }
}

class Derived extends Base {
    Derived() {
        System.out.println("Derived initialized.");
        // System.out.println(a); [错误]
        System.out.println(b); // 同一个包中可以访问的字段
        System.out.println(c);
        System.out.println(d);
    }
}

→ Main.java 中的 Main 类:

public class Main {
    public static void main(String[] args) {
        Base base = new Base();
        // System.out.println(base.a); [错误]
        System.out.println(base.b);
        System.out.println(base.c);
        System.out.println(base.d);

        Derived derived = new Derived();
        System.out.println(derived);
        Derived1 derived1 = new Derived1();
        System.out.println(derived1.e); // 同包的非子类可以访问的字段
        System.out.println(derived1.f); // 同包的非子类可以访问的字段

        Person person = new Person();
        // System.out.println(person.age); [错误]
        System.out.println(person.getAge());
        Person person1 = new Person(20);
        System.out.println(person1.getAge());

        if (person.setAge(18)) {
            System.out.println("Success!");
        } else {
            System.out.println("Failed!");
        }
        System.out.println(person.getAge());

        if (person1.setAge(300)) {
            System.out.println("Success!");
        } else {
            System.out.println("Failed!");
        }
        System.out.println(person1.getAge());
    }
}

→ 与 Base 类在同一个包中的 Derived1 类:

public class Derived1 extends Base {
    public int e = 10;
    int f = 12;

    Derived1() {
        System.out.println(b); // 同包的子类中可以访问的字段
        System.out.println(c); // 同包的子类中可以访问的字段
    }
}

→ pkg/Test1.java 中的 Test1 和 Test2 类:

package pkg.pkg1;

import pkg.Test;

public class Test1 extends Test {
    public Test1() {
        super();
        System.out.println("test1");
        // System.out.println(pri); [错误]
        // System.out.println(def); [错误]
        System.out.println(pro);
        System.out.println(pub);
    }
}

class Test2 {
    public Test2() {
        Test test = new Test();
        System.out.println("test2");
        // System.out.println(test.pri); [错误]
        // System.out.println(test.def); [错误]
        // System.out.println(test.pro); [错误]
        System.out.println(test.pub);
    }
}

3. 类的访问控制符

→ 定义类时,类的访问控制符要么是 public,要么是默认

① public:该类可以被其他类所访问

② 默认:只能被同包中的类访问

【注意】访问受两层控制:类与字段、方法

4. setter 和 getter 及其优势

① 将字段用 private 修饰,从而更好地将信息封装和隐藏

set 和 get 都用 public 来修饰,分别用 set 和 get 方法对类的属性进行存取

③ setter 和 getter 的优势:

        → 属性用 private 更好地封装和隐藏,外部类不能随意存取和修改

        → 提供方法来存取对象的属性,在方法中可以对给定参数的合法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值