201521123022 《Java程序设计》 第六周学习总结

1. 本周学习总结

1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。

2. 书面作业

Q1.clone方法

Q1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?

首先需注意到protected修饰的clone方法只能在本包里被访问,所以覆盖时修饰符应用public。其次要实现Cloneable接口。

Q1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。

适用于只允许在包里访问或被子类访问的类,作业Shape中,getPerimeter与getArea分别为计算面积与周长的方法,只有继承了Shape的子类才具这两种方法,因此用protected修饰。

Q1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?

不能。protected对于包外的类是不可见的,而Employee类和TestProtected类不在同一个包内。

Q2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2。仅需粘贴关键代码与运行结果,图片不要太大。

匿名内部类:

Comparator<PersonSortable2> NameComparator = new Comparator<PersonSortable2>() {
            public int compare(PersonSortable2 obj1,PersonSortable2 obj2) {
                if (obj1.getName() .compareTo(obj2.getName()) > 0)
                    return 1;
                else if (obj1.getName().compareTo(obj2.getName()) < 0)
                    return -1;
                else
                    return 0;
            }   
        };
        
   Comparator<PersonSortable2> AgeComparator = new Comparator<PersonSortable2>() {
            public int compare(PersonSortable2 obj1,PersonSortable2 obj2) {
                if (obj1.getAge() > obj2.getAge()) 
                    return 1;
                else if (obj1.getAge() < obj2.getAge()) 
                    return -1;
                else
                    return 0;
            }
        };

Lambda:

Comparator<PersonSortable2> NameComparator=(o1,o2)-> o1.getName().compareTo(o2.getName());
 Comparator<PersonSortable2> AgeComparator=(o1,o2)-> o1.getAge()-o2.getAge(); 

运行结果:

5
zhang 15
zhang 12
wang 14
Wang 17
li 17
NameComparator:sort
Wang-17
li-17
wang-14
zhang-15
zhang-12
AgeComparator:sort
zhang-12
wang-14
zhang-15
Wang-17
li-17

Q3.分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?

Comparator<Shape> shapeComparator = new  Comparator<Shape>() {  
     @Override  
     public int compare(Shape o1, Shape o2) {  
         //你的代码     
      }         
};  

shapeComparator所指向的对象实现了Comparator接口。用匿名内部类重写了接口当中的抽象方法。

Q4.GUI中的事件处理

Q4.1 写出事件处理模型中最重要的几个关键词。

  • 事件源
  • 事件对象
  • 事件监听器

Q4.2 使用代码与注释,证明你理解了事件处理模型。

截取老师课件中一段代码加以注释:

public class EventMainGUI1 extends Frame {
    static int count = 1;

    public EventMainGUI1(String title) {
        super(title);
    }

    public static void main(String args[]) {
        //初始化窗口
        EventMainGUI1 f = new EventMainGUI1("hello");
        f.setLayout(new FlowLayout());
        //定义一个按钮b(事件源),并赋上初始值1。
        final JButton b = new JButton("1");
        //注册监听器,按钮上的值每当b按钮被按下即+1。
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                b.setLabel(new Integer(++count).toString());
            }
        });
        f.add(b);//把b按钮加入f窗口
        f.setSize(100, 100);
        f.setBackground(Color.blue);//设置背景色
        f.setVisible(true);//该窗口可见
    }
}

3. 码云上代码提交记录

4. PTA实验

1.学会运用ArrayIntegerStack类,主要是判断是否栈空或栈满,进行对栈中元素入栈出栈以及统计栈大小等操作。
2.初步了解掌握静态内部类的应用。在外部类的方法中创建内部类对象,使用内部类的属性,静态内部类不能直接访问外部类的非静态成员。

posted @ 2017-04-02 17:21  漂流草子  阅读(214)  评论(1编辑  收藏  举报