读书人

20120110接口与种继承与实现两个类

发布时间: 2012-09-21 15:47:26 作者: rapoo

20120110接口与类,继承与实现,两个类共用同一对象

package netjava1.接口与类的区别0110;
/**
?* 定义person的接口
?* @author hxp
?*
?*/


public interface Person {
?/*
? * 在接口里定义一个 static final 的常量
? */
?public static final int age =100;
?/*
? * 定义一个public 的抽象方法 没有方法体
? */
?public void eat();
}


/**
?* 难点:接口的作用
?*? 1.虽然不能创建对象new Person()(因为没有构造函数)但是可以定义该数据类型的变量 Person p
?*? 2.可以当做父类
?*/

/**
?* 接口的特点:
?* 接口里定义的都是公共常量 定义一个常量age 常量就是必须要赋给他初始值final
?* 接口里的方法全部都是抽象方法 (即 没有方法体 没有{})
?*/

?

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

package netjava1.接口与类的区别0110;
/**
?* 定义一个student类实现接口
?* @author hxp
?*
?*/
public class Student implements Person {
?/*
? * 定义一个学生的年龄属性
? */
?public int age = 50;
?private String name;
?/*
? * 定义一个设置学生姓名的方法
? */
?void setName(String name){
??this.name = name;
?}
?
?/*
? * 定义一个学生的学习方法
? */
?void study(){
??System.out.print(" 学生在学习");
?}
?
?
? /*
? * 难点:一个类实现了一个接口就必须改写里面的所有方法 而且默认继承接口的属性
? */
?public void eat(){
??System.out.println("学生在食堂吃饭");
?}
}

?

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/**
?* 定义一个UNstudent类 继承Student类
?* @author hxp
?*
?*/
public class UNstudent extends Student{
?/*
? * 定义大学生的姓名属性 改写接口里的age属性
? */
?public int age=80;
?

?
?void study(){
??System.out.println("大学生挂在高数上了");
?}
}

?

?

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/**

package netjava1.接口与类的区别0110;


public class Test {
?public static void main(String args[]) {

??// 创建学生对象
??Student stu = new Student();
??stu.setName("张香利");
??stu.study();

??// 创建大学生对象
??UNstudent stu1 = new UNstudent();
??stu1.setName("胡晓培");
??stu1.study();

??// 子类对象的类型可以自动转成父类类型
??// 自动转型
??Student stu2 = new UNstudent();
??stu2.setName("毛文杰");
??stu2.study();

??
??Person p = new Student();
??p.eat();
??
??System.out.println(stu.age);//50
??System.out.println(stu1.age);//80
??System.out.println(stu2.age);//50
??System.out.println(p.age);//100
??
}
}

/**
?* 知识点:
?*? 类与接口的区别:
?*? 1、类可以生成对象 接口不能
?*? 2、类实现接口用implements关键字
?*? 3、一个类只能继承一个父类 但可以实现多个接口
?*/

/**
?* 继承与实现的区别:
?* 实现必须改写接口所有方法 继承 不是必须改写父类方法
?*/

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

package netjava1.两个登录界面画板0110;

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;

/**
?* 制作QQ登录界面
?*
?* @author 胡晓培
?*
?*/
public class login extends JFrame{
?public static void main(String args[]) {
??// 创建窗体
??login jf = new login();
??jf.initlogin();
??
}?
??
?void initlogin(){
?
??// 设置窗体的标题
??this.setTitle("QQ2011");
??this.setSize(345, 290);
??// 加上这句话表示默认退出
??this.setDefaultCloseOperation(3);

??// 设置流式布局管理器
??java.awt.FlowLayout layout = new java.awt.FlowLayout(
????java.awt.FlowLayout.LEFT, 0, 0);//q2:注意去看jdk里的构造方法
??// 把流式布局管理器放进窗体
??this.setLayout(layout);
?
??
??// 加入图片topPic
??// 先将其变成图标ImageIcon 建立图标对象icon1
??javax.swing.ImageIcon icon1 = new javax.swing.ImageIcon("扣扣.jpg");
??// 把图片插入
??JLabel topPic = new JLabel(icon1);// 错点1:创建图标标签 要传入图标作为参数
??this.add(topPic);
??
??
??//添加一个菜单条
??javax.swing.JMenuBar bar = new javax.swing.JMenuBar();
??//添加一个菜单
??javax.swing.JMenu jm1 = new javax.swing.JMenu("1??? ");
??javax.swing.JMenu jm2 = new javax.swing.JMenu("2??? ");
??javax.swing.JMenu jm3 = new javax.swing.JMenu("3??? ");
??bar.add(jm1);
??bar.add(jm2);
??bar.add(jm3);
??this.setJMenuBar(bar);
??
??
??// 加入图片secPic
??// 先将其变成图标 建立图标对象? 图标->标签->标签加到窗体
??javax.swing.ImageIcon icon2 = new javax.swing.ImageIcon("qq2.jpg");
??// 把图片插入
??JLabel secPic = new JLabel(icon2,JLabel.CENTER);// 错点1:创建图标标签 要传入图标作为参数
??this.add(secPic);??????????????????????????????? // 错点2:left是jlabel的静态变量所以要用类名调用
????????????????????????????????????????????????????? // 错点3:是要把流式布局管理器左对齐 因为图片在label里
??

??// 加入文本输入框 txtFild
??????? javax.swing.JTextField txtFild=new javax.swing.JTextField(18);
??????? this.add(txtFild);
???????
??????? // 加入文本标签“注册”nameLabel1
??JLabel nameLabel1 = new JLabel("?? 注册? ");
??this.add(nameLabel1);
??
??// 加入密码输入框passFild
??????? javax.swing.JPasswordField passFild=new javax.swing.JPasswordField(20);
??????? this.add(passFild);
??????? //设置密码显示的样式
??passFild.setEchoChar('●');
???????
??????? // 加入文本标签“找回”namelabel2
??JLabel nameLabel2 = new JLabel("找回");
??this.add(nameLabel2);
??
??//建立“登录”按钮jb2
??javax.swing.JButton jb2 = new javax.swing.JButton("登录");
??this.add(jb2);
??
??//建立复选框“记住密码”cb1
??javax.swing.JCheckBox cb1 = new javax.swing.JCheckBox("记住密码");
??this.add(cb1);
??
??//建立复选框“自动登录”cb2
??javax.swing.JCheckBox cb2 = new javax.swing.JCheckBox("自动登录");
??this.add(cb2);
??
?
?
??String items[] = {"我在线上","Q我吧","离开","忙碌","请勿打扰","隐身"};
??
??//建立下拉菜单JComboBox“”里面放 string的 这个items数组
??javax.swing.JComboBox box = new javax.swing.JComboBox(items);
??//设置
??Dimension dim = new Dimension(90,20);
??box.setPreferredSize(dim);
??this.add(box);
??
??//创建一个登录按钮监听器的对象
??loginlistener lis = new loginlistener(txtFild,passFild,this);
??//把监听器对象安装在登录按钮上
??jb2.addActionListener(lis);
?

??
??this.setVisible(true);
?}
}
/**
?*? 1.? Dimension这个类是设置组件的宽度和高度
?*????? setsize是设置窗体jframe的? 设置其他组件的size都是用这个类
?*????? 具体实现是
?*????? //先建立一个dimension对象
?*????? Dimension dim = new Dimension(90,20);
?*????? //然后在这个组件里有一个方法叫 setPreferredSize 就可以设置组件的大小了
?*??box.setPreferredSize(dim);
?*/

?/**
? *?? 2.错点: 加菜单条JMenuBar上去的时候?
?*???? 是加到窗体上 jf.setJMenuBar(bar);
?*???? 有专门的语句 而不是加组件的 add
?*/????

/**
?* //父类对象不能调用子类的方法 所以 把jf设置成JFrame类型? jf.initlogin()会报错
?*/

?

?

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

package netjava1.两个登录界面画板0110;
/**
?* 一个登录按钮监听器的类 实现接口ActionListener
?*/
import java.awt.event.ActionEvent;

import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class loginlistener implements java.awt.event.ActionListener{
??/*
?? * 定义账号和密码? 用来承接 输入的账号和密码
?? */
??private JTextField jt1;
??private JPasswordField jt2;
??private login jf;
??
??/*
?? * 改写他的构造函数
?? */
??public loginlistener(JTextField jt1,JPasswordField jt2,login jf){
???this.jt1 = jt1;
???this.jt2 = jt2;
???this.jf? = jf;
???
??}
??
??/*
?? *实现 ActionListener里的方法
?? */
?public void actionPerformed(ActionEvent e) {
??/*
?? * 调用文本输入框的gettext函数 来得到 输入的账号和密码
?? */
??String name = jt1.getText();
??String pwd = jt2.getText();
??/*
?? * 打印账号和密码到java界面上
?? */
??System.out.print("账号:"+name+"\n"+"密码:"+pwd);
??
??
??
??//现在要判断一下他输入的是不是 我想要的 如果是 则弹出画板界面
??if(name.equals("")&&pwd.equals("")){
???DrawFrame df = new DrawFrame();
???df.initDrawFrame();
???jf.setVisible(false);
??}
??//若不是 则弹出错误框
??else{
???javax.swing.JOptionPane.showMessageDialog(null, "账号或者密码错误,请检查!");
??}
?}

}
/**
?* 难点1:监听器里的方法在创建对象的时候就自动调用了
?* 难点2:ActionEvent e暂时还没有用到?????
?* 难点3:要获得文本区域输入的文字 就要用文本对象来调用gettext????
?* 难点4:因为txtfild 和 passfild都是login.java里的 所以为了在这里使用只能重载构造函数?
?* 难点5:这里的jt1 和jt2 分别是 JTextField? JPasswordField类型 而非 string类型?
?* 因为 我们是在 单击这个登录按钮的时候 才将 内容传入并打印出来的
?* 若 在构造函数中 直接设成 string类型 则表明 把监听器 安到按钮上去的时候 内容就传进来了
?*/
??? ?
/**
?* 事件监听机制的理解
?*? 在这个例子中? 监听器是放在登录按钮上
?*? 从安装上监听器开始,监听器始终处于工作状态(即建立好监听器对象)
?*? 知道按下登录按钮? 监听器对象开始自动调用方法 实现它的功能
?*/

/**
?* 如何在两个类中共用同一个对象
?*??? 为了把另一个类中的对象JTxtFild用到另一个类中 就要在该类中设置参数jt1来接收这个对象
?*??? 所以就需要重载构造函数public loginlistener(JTextField jt1,JPasswordField jt2)
?*?? 来把这个对象JTxtFild 传进来
?*??? 然后才能在类的方法里用到这个共用的对象
?*/

?

?

这是学java的第四天? 我是从2012年1月7日开始在蓝杰学java

感觉很好 继续努力

就像一个小蜗牛 慢慢的一点一点的留下自己的轨迹

虽然很慢 但是收获颇丰

?

读书人网 >编程

热点推荐