clone
方法是被protected修飾,在自定義的類中覆蓋clone方法時須要注意什麼?答:clone方法中被protected修飾,那就代表子類要運用clone方法必須與父類在同一個包中。所以咱們在自定義的類中要覆蓋clone方法並聲明爲public。還要讓類操做Cloneable接口。
protected的訪問權限是本類,同包和子類,當子類想要訪問父類的屬性和方法時,可使用protected。例如:子類圓形和正方形想調用父類Shape中的getArea()方法,就能夠寫成protected double getArea().
abstract class Shape { private final static double PI = 3.14; public abstract double getArea(); }
package test1; public class Employee implements Cloneable { private String name; private double salary; public Employee(String name, double salary) { super(); this.name = name; this.salary = salary; } @Override protected Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return super.clone(); } }
答:編譯失敗,緣由是The method clone() from the type Employee is not visible 因此寫clone()方法,通常都用public來修飾。
Comparator<PersonSortable2> nameComparator = new Comparator<PersonSortable2>(){ @Override public int compare(PersonSortable2 o1, PersonSortable2 o2) { // TODO Auto-generated method stub return o1.getName().compareTo(o2.getName()); } }; //匿名內部類對姓名的排序 Comparator<PersonSortable2> ageComparator = new Comparator<PersonSortable2>(){ @Override public int compare(PersonSortable2 o1, PersonSortable2 o2) { // TODO Auto-generated method stub if (o1.getAge() < o2.getAge()) { return -1; } else if (o1.getAge() > o2.getAge()) { return 1; } else { return 0; } } };//匿名內部類對age的排序
運行結果:java
Arrays.sort(person,(o1,o2)->o1.getName().compareTo(o2.getName()));
//Lambda表達式對Name排序編程
Arrays.sort(person,(o1,o2)->o1.getAge()-o2.getAge());
//Lambda表達式對Age排序數組
shapeComparator
所指向的對象與Comparator接口有什麼關係?Comparator<Shape> shapeComparator = new Comparator<Shape>() { @Override public int compare(Shape o1, Shape o2) { //你的代碼 } };
答:shapeComparator這個對象操做了Comparator這個接口。要建立匿名內部類也要和定義類的時候操做接口同樣,重寫接口當中的抽象方法。
任何支持GUI的操做環境都要不斷地監視 敲擊鍵盤或點擊鼠標這樣的事件 事件源:可以產生時間的一些組件,如botton。 監聽器:當某個事件發生的時候,但願執行一段與該事件對應的代碼。這段被執行的代碼應放到相應監聽器中的某個方法中。
//定義專門的外部類實現監聽接口 public class MainGUI { public static void main(String[] args) { JFrame f = new JFrame("Test"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton b = new JButton("Press Me!");//事件源 b.addActionListener(new ButtonHandler());//註冊監聽器 f.add(b); f.setSize(200, 100); f.setVisible(true); } private static class ButtonHandler implements ActionListener{//監聽器 public void actionPerformed(ActionEvent e) { System.out.println("Action occurred"); System.out.println(e.getSource());//得到事件源 } } }
繼續完善上週的項目做業。考覈點以下:框架
(只是作了大概,由於有一些操做方法仍是不懂,沒法實現其餘功能!!!)
登陸界面:
商品界面:ide
購物車界面:佈局
private void accountActionPerformed(java.awt.event.ActionEvent evt) { String a=account.getText(); // TODO add your handling code here: }
本身作的。學習
大部分方法要結合Netbeans裏的組件來完成。ui
5.3 ArrayIntegerStack,功能與棧同樣,在內部創建一個數組和一個標記top,記錄棧頂位置,判斷是否棧空或棧滿,private Integer[] arr; private int top=0;,實現接口的功能,主要是top的值的改變,最難的是判斷棧空和棧滿時,要輸出對應數量的null,此時可根據top-arr.length的差值來輸出null的個數。若是用ArrayList操做的話,就是用add()和remove()方法來實現,相對來講會簡單一些。
5.4 靜態內部類,主要在外部類的方法中,建立內部類對象,使用內部類的屬性,靜態內部類不能直接訪問外部類的非靜態成員,但能夠經過 new 外部類().屬性 的方式訪問。this