201521123072《Java程序设计》第6周学习总结

201521123072《Java程序设计》第6周学习总结

标签(空格分隔): java


1. 本周学习总结

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

2. 书面作业

clone方法

1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?
在自定义的类中覆盖clone方法,首先要实现Cloneable接口,并将clone方法声明为public,这样在不同的包中其他类才能调用clone方法。
Object对象中的clone方法是这样定义的

以Employee为例,此时将Employee类放在不同的包中,如果将clone定义为protected,则会提示错误
所以在覆盖clone方法时,应该将其声明为public.
1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。
protected在类的内部,相同的包中,子类能进行存取,在不同的包中不能进行存取,也就是说,如果对于一个方法,我希望在其他的包中不进行存取,则使用protected进行修饰
对于Shape类:

  abstract class Shape{
    final static double PI=3.14;
	private static  double sum1=0.0;
	private static double sum2=0.0;
	protected abstract double getPerimeter();
	protected  abstract double getArea(); 
	public static double getSum1() {
		return sum1;
	}
	public static void setSum1(double sum1) {
		Shape.sum1 = sum1;
	}
	public static double getSum2() {
		return sum2;
	}
	public static void setSum2(double sum2) {
		Shape.sum2 = sum2;
	}
	public static double sumAllArea(Shape shape){ 
		Shape.sum1=Shape.sum1+shape.getArea();
		 return sum1;
	 }
	 public static double sumAllPerimeter(Shape shape){
		 Shape.sum2=Shape.sum2+shape.getPerimeter();
		 return sum2;
	 } 
}

其中的 getPerimeter(),getArea()方法,我只希望其子类可以调用,则可以使用protected 进行修饰。
1.3 在test1包中编写简单的Employee类,在test2包中新建一个Protected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个Test新对象,能否成功?为什么?
不能成功,因为Employee类中的clone方法如下,是为Protected,

在不同的包中是不能进行存取的,在第一小题中做了说明。

使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2

使用匿名内部类:


运行结果:

使用Lambda表达式:

Arrays.sort(personSortable2s, (PersonSortable2 o1, PersonSortable2 o2) -> (o1.getName().compareTo(o2.getName())));			    
Arrays.sort(personSortable2s, (PersonSortable2 o1, PersonSortable2 o2) -> o1.getAge()-o2.getAge());

运行结果同上

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

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

这是一个匿名内部类。shapeComparator这个对象操作了Comparator这个接口,对Shape该对象进行排序

GUI中的事件处理

4.1 写出事件处理模型中最重要的几个关键词。
事件源
事件
事件监听器
4.2 使用代码与注释,证明你理解了事件处理模型。
例如用匿名内部类实现监听接口
以下代码实现了每按一次按钮,按钮上的数字加1

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());
	    final JButton b = new JButton("1");//事件源
	    b.addActionListener(new ActionListener(){//监听器
	       public void actionPerformed(ActionEvent evt){
	           b.setLabel(new Integer(++count).toString());
	      }
	    });
	   f.add(b);
	   f.setSize(100,100);
	   f.setBackground(Color.blue);
	   f.setVisible(true);
	  }
	}

结对编程:面向对象设计

5.1 尝试使用图形界面改写。
此次设计了一个登录界面

5.2 给出两人在码云上同一项目的提交记录截图。

5.3 与上周相比,项目的主要改动是什么?
主要改动是登录界面

3. 码云上代码提交记录及PTA实验总结

3.1. 码云代码提交记录

3.2. PTA实验
匿名内部类的使用
掌握嵌套类的使用

posted @ 2017-04-02 19:51  七悸  阅读(191)  评论(1编辑  收藏  举报