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

感觉很好 继续努力

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

虽然很慢 但是收获颇丰

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值