`

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

感觉很好 继续努力

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

虽然很慢 但是收获颇丰

 

分享到:
评论

相关推荐

    61条面向对象设计的经验原则

    - **解释**:如果两个对象都被同一个类所包含,那么它们之间不应该有直接的依赖关系。这有助于降低对象之间的耦合度。 #### 36. 特化层次结构原则 - **原则描述**:“继承只应被用来为特化层次结构建模。” - **...

    C语言程序设计清华大学郑莉PPT课件.pptx

    类是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和行为两个主要部分。类的声明形式为:class 类名称{ public: 公有成员(外部接口) private: 私有成员 ...

    精品资料(2021-2022年收藏)面向对象技术Java期末复习试卷四.docx

    这意味着无论创建了多少个类的实例,它们都将共用同一份静态变量的副本。选项B正确描述了这一点,表示静态变量在方法中创建后,会在多次调用之间保留其值。 2. 方法重载:方法重载是指在同一个类中,可以有多个方法...

    多个生产者消费者问题

    在Java中,可以通过继承`Thread`类或者实现`Runnable`接口的方式来创建线程。本程序采用了后者的方式: - **Producer**:实现了`Runnable`接口,代表了生产者的逻辑。它不断地生成字符,并将这些字符推送到`MyStack`...

    LTP .NET常用类

    封装使得数据和行为可以安全地包装在一个类中,继承允许子类从父类继承属性和方法,而多态则提供了不同对象对同一消息的不同响应能力,增强了代码的灵活性。 在类型验证方面,开发者可能会实现自定义的`...

    多线程资源共享集合

    `synchronized`关键字提供了基本的互斥访问保证,而`Runnable`接口和`Thread`类则是实现多线程的两种主要方式。理解并熟练运用这些概念和工具,对于编写高效、安全的多线程程序至关重要。在实践中,我们需要根据具体...

    PHP在同一域名下两个不同的项目做独立登录机制详解

    因此,如果两个项目共用同一个session_id,它们的会话信息将会被共享。 要解决这个问题,我们可以采取以下策略: 1. **定义不同的session_name**: 在每个项目的初始化文件中,我们可以通过`session_name()`函数...

    c# 基础 问答形式 有详细答案

    接口多继承可能导致命名冲突,如果两个接口定义了同名成员,则实现类需要显式指定使用哪个接口的成员。 #### 18. 抽象类与接口的对比 抽象类可以包含部分实现,并允许实例化(尽管不能直接实例化抽象类本身),而...

    Java23中设计模式

    - **应用场景**:两个不兼容的接口需要合作。 - **实现方式**:通过继承或组合实现。 **21. Decorator(装饰模式)** - **定义**:动态地给一个对象添加一些额外的职责。 - **应用场景**:需要扩展功能但不想修改...

    重构-改善既有代码的设计简体中文高清文字pdf

    可以将这两种支付方式分别提炼成`CreditCardPayment`和`DebitCardPayment`接口,让`PaymentProcessor`类实现这两个接口,从而提高了代码的灵活性。 ### Extract Method(提炼函数) - **应用场景**:当一个方法过于...

    hibernate学习笔记

    - **POJO (Plain Old Java Object)**:即普通的Java对象,它没有继承任何特殊类或实现特定接口,是Hibernate进行对象持久化的基础。 - **Hibernate.cfg.xml**:这是Hibernate的核心配置文件,用于配置数据库连接信息...

    软件工程期末试卷,参考下吧。。

    (8)假如两个模块都能访问同一变量,则这两个模块具有共用耦合关系。答案:C.共用。 (9)在面向对象程序设计中,用信息隐藏方法来解决。答案:A.信息隐藏。 (10)在面向对象设计中,用继承方法可以方便地设计...

    c++程序设计(谭浩强)

    多态则通过虚函数和抽象类实现,使得不同的对象能对同一消息做出不同的响应。这一章会讲解这些概念和它们在实际编程中的应用。 9. **第11章** - 输入/输出流 C++的I/O流库提供了强大的文件读写功能。这一章会介绍...

    自测试卷5.doc1.简述C#、Java和C++的比较。 2.已知变量x的初值为24,则表达式x+=x--+=x%=17运算的结果值为( )。

    静态变量共享同一内存空间,所有实例共用;静态方法不能访问非静态成员,不改变实例状态。 7. **using和new的区别** using关键字常用于导入命名空间或在代码块内创建临时对象并自动处理其 Dispose 方法。new ...

    软件工程试卷\《软件工程》期末试卷

    8. **耦合关系**:两个模块都能访问同一变量表示它们有共享数据的耦合关系,即共用耦合,C选项正确。 9. **多态性**:在面向对象编程中,通过多态性可以解决不同媒介上的文件打开问题,允许不同类型的对象对同一...

    Accp5.0 s2 深入.NET第四章 理论答案

    - 类和对象:掌握C#中的类定义、对象创建、继承、封装和多态性。 - 枚举和结构:了解这两种基本数据类型的区别和使用场景。 - 泛型:理解泛型的用途,如何创建泛型类、接口和方法。 - 接口和抽象类:学习它们在设计...

    C++经典教程(破解版)

    =、>、<、>=、):比较两个值。 - **逻辑运算符**(&&、||、!):用于逻辑判断。 - **位运算符**(&、|、^、~、、>>):按二进制位操作。 **2.4 表达式** - **表达式的分类**:算术表达式、关系表达式、逻辑表达式...

    自考C++2009.10..有解.pdf

    17. **静态数据成员**:类的静态数据成员是共享的,所有类对象都共用同一份存储,所以`a.x=10`后,`b.x`的值也是10,选项B正确。 18. **字符串操作**:在C++中,`string.h`库的`strcat()`函数用于连接两个字符串。 ...

Global site tag (gtag.js) - Google Analytics