乐趣区

关于java:cs61b-week3-Java-libraries-and-packages

(本节是线下课,且视频品质较差,疯狂掉帧与闪屏,只能看 PPT 和 gitBook,了解可能不到位)

1.Java 库

Java 领有一些内置的抽象数据类型可供你应用,它们被打包在 Java Libraries 中

在 java.util library 有三个比拟重要的 ADTs:

List: 有序元素汇合,蕴含 ArrayList 和 LinkList
Set: 无序元素汇合,无反复元素,蕴含 HashSet 和 TreeSet
Map: key/values 键值对型元素的汇合蕴含 HashMap 和 TreeMap


应用举例:
1.ArrayList

public static List<String> getWords(String inputFileName) {List<String> lst = new ArrayList<String>();
    In in = new In();
    while (!in.isEmpty()) {lst.add(in.readString()); //optionally, define a cleanString() method that cleans the string first.}
    return lst;
}

public static int countUniqueWords(List<String> words) {Set<String> ss = new HashSet<>();
    for (String s : words) {ss.add(s);        
    }
    return ss.size();}

2.HashMap:

public static Map<String, Integer> collectWordCount(List<String> words) {Map<String, Integer> counts = new HashMap<String, Integer>();
    for (String t: target) {counts.put(s, 0);
    }
    for (String s: words) {if (counts.containsKey(s)) {counts.put(word, counts.get(s)+1);
        }
    }
    return counts;
}

2. 接口总结

对于 interface inheritance 和 implementation inheritane 的区别:

  • Interface inheritance: What (the class can do).
  • Implementation inheritance: How (the class does it).

interface 可能混合了 abstract 办法和 defalut 办法

Abstract methods are what. 必须被子类 Override.
Default methods are how.

此外

  • 除非你应用关键字 default,否则一个办法将会被视为 abstract 类型
  • 除非你指定拜访修饰符,否则办法将是 public。

更多无关接口的细节:

  • inteface 能提供变量,然而变量是 public static final类型
  • final 意味着变量的值永远不会扭转,咱们在 Proj 0 中应用过,万有引力常数 G =6.67e-11
  • 一个类能够 implements 多个 接口

Interfaces:

  • 不能被实例化,不能 new interface()
  • 能提供形象办法与具体方法, 形象办法指只有函数 header 申明,具体方法指函数里有具体的代码实现
  • 只能提供 public static final 类型的变量
  • Java 9 为接口提供了 private 办法

3. 抽象类介绍

抽象类是介于接口和类之间的一个两头档次。
抽象类与接口,类的相似之处是:

  • 不能被实例化
  • 能提供形象办法和具体方法

不同之处是:

  • 抽象类中的形象办法以关键字 abstract 申明,而具体方法不应用任何关键字(接口中具体方法应用default)
  • 能提供任何类型的变量 (接口仅有public static final 类型)
  • Can provide protected and package private methods
  • 子类只能继承一个抽象类
  • 接口能做的,抽象类也能做,且能做更多

例如:

public abstract class GraphicObject {
    public int x, y;
    ...
    public void moveTo(int newX, int newY) {...}
    public abstract void draw();
    public abstract void resize();}

在 Implementations 的子类中必须 Override 抽象类的所有形象办法

public class Circle extends GraphicObject {public void draw() {...}
    public void resize() { ...}
}

抽象类在 Java 规范库中的利用:

总结:

  1. 抽象类能够被认为是一般类和接口的混合。
  2. 抽象类相似于接口,因而它们不能被实例化。
  3. 抽象类中的所有办法都像类中的一般办法,除非它们后面有 abstract 关键字, 如果是这种状况,那么它们将被视为接口中的一般办法,不须要具备代码主体,而且能够由 extends 抽象类的子类去 Override。
  4. 抽象类和接口之间一个十分重要的区别是,一个类只能 extends 一个抽象类,但能够 implements 多个接口。

3.Packages

Packages 是一个组织类和接口的命名空间。
命名常规:Packages name 以网站地址开始(倒过去)
要应用来自不同包的类,请应用以下语法:

package_name.classname.subclassname a = new package_name.classname.subclassname();

为了使代码简洁,能够应用import

import package_name.classname.subclassname;
  • import class:

  • import static member:

Wildcard import * 通配符 援用: 最好不要应用通配符援用,可能会导致编译谬误!

退出移动版