201521123093 java 第六周学习总结

1. 本周学习总结

  • 1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。
    注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。
    注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。

2. 书面作业

1.clone方法

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

       答:(1)自定义的类中要实现Cloneable接口,如果没有实现这个接口就会出现异常
           (2)在覆盖时要声明为public
           (3)调用的时候要用super.clone();
    
  • 1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。

    答:shape中的代码:

           public abstract class Shape {
           public final static double PI = Math.PI;
           protected double area;
           protected double perimeter;	
           public double getArea(){
           return this.area;
           }
           public double getPerimeter(){
           return this.perimeter;
           }
           abstract protected void setArea();
           abstract protected void setPerimeter();
           }
    
    
    首先,被`protected`修饰的方法可以在同一个包内被调用,即使不是同一个类,只要是在同一个包内就可以使用,`shape`中有很多个类,比如
    长方形,圆形,正方形等等,但他们都有共同的方法就是求面积和周长,所以这两种方法是用protected进行修饰的。
    
  • 1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?

      答:不能成功,如图所示:
    

Employee类用的是protected修饰的,而这两个类并不在一个包内,是不能共享的。

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

仅需粘贴关键代码与运行结果,图片不要太大。

  • 匿名内部类

        NameComparator a = new NameComparator();
      Arrays.sort(persons,a);
      for(PersonSortable2 personSortable2 : persons){
      	System.out.println(personSortable2);
      }
      AgeComparator b = new AgeComparator();
      Arrays.sort(persons,b);
      for(PersonSortable2 personSortable2 : persons){
      	System.out.println(personSortable2);
      }
    
  • Lamda表达式

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

实验结果:

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

     @Override  
     public int compare(Shape o1, Shape o2) {  
         //你的代码     
      }         
};
     答:让`shapeComparator`所指向的对象实现了`Comparator`接口,  public int compare(Shape o1, Shape o2)使用匿名内部类的方法进行排序。
          就如同上一题,可以直接使用Arrays.sort()进行排序。

4.GUI中的事件处理

  • 4.1 写出事件处理模型中最重要的几个关键词。

      答:事件:描述发生了什么的对象
          事件源:事件的产生器
          事件监听器:根据某种类型的事件XXX,定义对应的事件监听器类,该类需要实现针对特定事件的特定接口。
    
  • 4.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());
               final JButton b = new JButton("1");  //事件源,创建一个按钮
               b.addActionListener(new ActionListener()
              { 
                    public void actionPerformed(ActionEvent evt)
                    {
                         b.setLabel(new Integer(++count).toString());  //每点击一次按钮,按钮上的数字就会加1
                    }
              });
              f.add(b);  //添加按钮
              f.setSize(100,200);  //设置窗体大小
              f.setBackground(Color.pink);  //设置窗体颜色
              f.setVisible(true);  //设置窗体可见
          }
       }
    

5.结对编程:面向对象设计(大作业2-非常重要,未完成-2)

继续完善上周的项目作业。考核点如下:

  • 5.1 尝试使用图形界面改写。

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

  • 5.3 与上周相比,项目的主要改动是什么?

       上周的大作业代码没有写出来,这周把大概的代码写出来了,但是图形界面还没弄好。
    
public class ShoppingCart {
	private Map<Integer,ProductItem> map = new LinkedHashMap<Integer,ProductItem>();
	public void addProduct(Product p){
		int productId = p.getProductId();
		if(map.containsKey(productId)){
			ProductItem productItem = map.get(productId);
			productItem.setCount(productItem.getCount()+1);
		}
		else{
			map.put(productId, new ProductItem(p,1));
		}
	}
	public void showAll(){
		Collection<ProductItem>productItems = map.values();
		java.util.Iterator<ProductItem> iterator = productItems.iterator();
		while(iterator.hasNext()){
			ProductItem productItem = iterator.next();
			Product product = productItem.getProduct();
			System.out.println("商品编号:"+product.getProductId()+",商品名称:"
					+product.getProductName()+",单价:"+product.getPrice()+",数量:"+productItem.getCount()
					 +",小计:"+productItem.totalMoney());
		}
	}
	public boolean deleteProduct(int productId){
		 if(map.containsKey(productId)){
			 map.remove(productId); 
			 return true; 
		 }
		return false;
	}
	public boolean modifyProduct(int productId,int count){
		if(map.containsKey(productId)){
			if(count>=1){
				ProductItem productItem = map.get(productId);
				productItem.setCount(count);
				return true;
				
			}
			else if(count==0){
				deleteProduct(productId); 
				return true;
			}
		}
		return false;
	}
	public void clearCart(){
		map.clear();
	}
	public double totalAllMoney(){
		double total=0;
		Collection<ProductItem> productItems = map.values();
		java.util.Iterator<ProductItem> iterator = productItems.iterator(); 
		while(iterator.hasNext()){
			ProductItem productItem = iterator.next();
			double money=productItem.totalMoney(); 
			total+=money;
		}
		return total;
	}
public class ProductItem {
	private Product product;
	private int count;
	public double totalMoney(){
		double price = product.getPrice();
		return price*count;
	}
	public ProductItem(){
		super();
	}
	public ProductItem(Product product,int count){
		super();
		this.product = product;
		this.count = count;
	}
	public Product getProduct(){
		return product;
	}
	public void setProduct(Product product){
		this.product =product;
	}
	public int getCount(){
		return count;
	}
	public void setCount(int count){
		this.count =count;
	}

}
public class Product {
	private int productId;  //商品编号
	private String productName;//商品名称
	private String category;//商品分类
	private double price;//单价
	public Product(){
		super();
	}
	public Product(int productId,String productName,String category,double price){
		super();
		this.productId =productId;
		this.productName =productName;
		this.category = category;
		this.price = price;
	}
	public String toString(){
		return "Product[productId = "+ productId + ",productName = " + productName + "," +
				"category = "+ category +",price = "+ price +"]";
	}
	public int getProductId(){
		return productId;
	}
	public void setProductId(int productId){
		this.productId =productId;
	}
	public String getProductName(){
		return productName;
	}
	public void setProductName(String productName){
		this.productName =productName;
	}
	public String getCategory(){
		return category;
	}
	public void setCategory(String category){
		this.category =category;
	}
	public double getPrice(){
		return price;
	}
	public void setPrice(double price){
		this.price =price;
	}

}

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

题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类

  • 3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

  • 3.2. PTA实验

函数(选做:4-1)、编程(5-3, 5-4)
一定要有实验总结

    答:(1)继续学习comparable与comparator
        (2)5-3:用 ArrayIntegerStack 类,IntegerStack进行接口注释,类似栈,但是`ArrayList`中有直接的代码可以应用在头尾位置,
                  也要判断栈什么时候满, 什么时候为空

posted on 2017-04-02 18:25  赵铭  阅读(197)  评论(0编辑  收藏  举报

导航