• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
齐畅
博客园    首页    新随笔    联系   管理    订阅  订阅
201521123073 《Java程序设计》第6周学习总结

1. 本章学习总结

2. 书面作业

1.clone方法

1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?
1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。
1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?

(1.1)
答:在自定义的类中覆盖clone方法时需注意的是,Object对象中的clone方法是被protected修饰,需要修改成public修饰,确保其他类可以访问这个方法。


(1.2)
答:Shape中的Rectangle的width、length被定义为private,

public class Rectangle extends Shape
{
    private double width;
    private double length;
}
无法在子类中直接存取,只能通过public double getWidth() public double getlength()来获取;但是把shape中的width、length定义为public,
public class Rectangle extends Shape
{
    public double width;
    public double length;
}
又会完全开放这些量的权限,而我们只想让子类可以直接存取width、length的话,就得定义它们为protected,
public class Rectangle extends Shape
{
    protected double width;
    protected double length;
}
这样相同的包的类或者不同包中的类可以访问它的属性和方法。

(1.3)
答:不能成功。这俩类不在一个包内,也不是继承关系。
解决方法如下:
在test2包里加上import test1.Employee;
让TestProtected继承Employee类


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

//匿名类:
class PersonSortable2 {
    private String name;
    private int age;
    public PersonSortable2(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return this.name+"-"+this.age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
        }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
public class comparatorAnonymous {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Comparator<PersonSortable2> NameComparator = new Comparator<PersonSortable2>(){
            public int compare(PersonSortable2 o1, PersonSortable2 o2) {
                // TODO Auto-generated method stub
                if (o1 == o2) return 0;
                return o1.getName().compareTo(o2.getName());
            }
        };
        Comparator<PersonSortable2> AgeComparator = new Comparator<PersonSortable2>(){
            public int compare(PersonSortable2 o1, PersonSortable2 o2) {
                if (o1 == o2) return 0;
                return o1.getAge()-o2.getAge();
            }
        };
        Scanner sc=new Scanner (System.in);
        int n = sc.nextInt();
        PersonSortable2[] test=new PersonSortable2[n];
        for (int i = 0; i < n; i++) {
            test[i] = new PersonSortable2(sc.next(), sc.nextInt());
        }
        System.out.println("NameComparator:sort");
        Arrays.sort(test,NameComparator);
        for (PersonSortable2 personSortable1 : test) {
            System.out.println(personSortable1);
        }
        System.out.println("AgeComparator:sort");
        Arrays.sort(test,AgeComparator);
        for (PersonSortable2 personSortable2 : test) {
            System.out.println(personSortable2);
        }
        sc.close();
    }
}

//Lambda表达式

public class comparatorLambda {
    
    class PersonSortable2 {
        private String name;
        private int age;
        
        public PersonSortable2(String name, int age) {
            this.name = name;
            this.age = age;
        }
        @Override
        public String toString() {
            return this.name+"-"+this.age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner (System.in);
        int n = sc.nextInt();
        PersonSortable2[] test=new PersonSortable2[n];
        PersonSortable2 o1;
        PersonSortable2 o2;
        Comparator<PersonSortable2> NameComparator = (o1 , o2) --> o1.getName().compareTo(o2.getName());
        Comparator<PersonSortable2> AgeComparator = (o1,o2) --> o1.getAge()-o2.getAge();
        for (int i = 0; i < n; i++) {
            test[i] = new PersonSortable2(sc.next(), sc.nextInt());
        }
        System.out.println("NameComparator:sort");
        Arrays.sort(test,NameComparator);
        for (PersonSortable2 personSortable1 : test) {
            System.out.println(personSortable1);
        }
        System.out.println("AgeComparator:sort");
        Arrays.sort(test,AgeComparator);
        for (PersonSortable2 personSortable2 : test) {
            System.out.println(personSortable2);
        }
        sc.close();
    }
}

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

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

答:shapeComparator所指的对象能够实现Comparator接口,使其对象能够使用Arrays.sort进行排序。


4.GUI中的事件处理

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

答: 事件对象、事件源、事件监听器。

4.2.使用代码与注释,证明你理解了事件处理模型。
package test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

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());//获得事件源
        }
    }
}   

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

题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类
3.1. 码云代码提交记录

3.2. PTA实验

函数(选做:4-1)、编程(5-3, 5-4)
1.内部类书写格式问题,starter = new MySatrter (new ActionListener(){...})
2.在匿名内部类中存取局部变量,该变量必须是final,否则编译错误,final Scanner sc = new Scanner(System.in);
3.本次实验主要体会是在于匿名内部类的使用,在对于一次性的方法或者是结合Lambda进行重写方法有了较好的掌握。
posted on 2017-04-02 20:54  齐畅  阅读(270)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3