类的继承,接口与监听器

(一)

1.继承格式
 继承的关键字是extends.
 继承语法格式
  public class 类名(子类名)  extends  类名(父类名){
   
  }

2.子类继承到父类的那些方法和属性
 现实生活中的继承:儿子只能继承父母一定的特征和行为。
 
 子类只能继承到一部分的属性和方法。
 子类和父类在同一个包下:
  只有私有的属性、方法和构造函数不能被继承。
  只有公有的、受保护的、默认的属性和方法可以被子类继承。
     (公有的构造函数也不能被继承)
    
 子类和父类不在同一个包下:
  只有公有的属性和方法可以被子类继承。

3.方法的重写
 方法重载:方法的名字必须完全相同,但是参数个数和参数类型要不同。
 
 要实现方法重写:必须存在继承的关系,子类中定义的方法,必须在父类中存在。

 创建对象的格式:子类名  对象名  =  new  子类构造函数();
 实现了方法重写后,在调用方法的时候,会优先执行子类的方法,如果子类没有该方法,则调用父类的方法。

4.自动转型
 要实现自动转型必须存在继承的关系。
 创建对象的格式:父类名  对象名  =  new  子类构造函数();
 (将由子类构造函数创建的对象转换为父类)
 
 自动转型后,不能调用子类自己的方法.

 多态:是由方法重载,继承、方法重写、自动转型导致程序在编译的时候不能确定最终要执行的方法是谁的,
 只有在运行的时候才能确定最终要执行的方法。
 多态:表示的是对象的不同形态。

5.继承的优势
 如果没有继承,增加工作量,不便于扩展,
 
 存在继承的优势:
 1.提供高程序的可扩展性
 2.降低代码的冗余
 3.增加了协作的方便

 

(二)

1.定义接口的语法
 接口是一种特殊的类。
 定义关键字是interface.
 定义的语法:
 public interface  接口{

  接口中只能定义公有的属性和公有的方法。
  定义常量(属性一种)
  //定义常量的语法,static表示是静态的可以直接使用接口名.常量名进行调用,final表示常量的值不可以修改。
  public static final 数据类型  常量名  =  值;

  //定义方法的语法,接口的方法定义,一定不要加上{},否则就出错。
  public 返回值类型  方法名([参数类型 参数名,...]);

  //接口的默认访问修饰符是public的。
  返回值类型   方法名([参数类型 参数名,...]);
 }

2.实现接口
 实现接口的关键字是implements .
 实现的语法格式:
 public class 子类名  implements  父接口名{

 }

 接口的特性:要求子类必须实现接口中定义的所有方法(相当于方法重写)

 用途:如果要求子类必须要完成某些功能,就可以定义一个接口,让子类去实现。

3.接口和类的区别
 1.定义接口的关键字是interface,定义类的关键字是class
 2.实现接口的关键字是implements,继承类的关键字是extends
 3.接口中所有的方法和属性必须是公有的并且没有具体的实现,
  类中定义的方法可以是private ,protected,public属性和方法,但是方法必须要有具体的实现。
 4.接口可以继承接口,并且可以继承多个接口,类只能继承一个父类,但是可以实现多个接口。
 5.接口不可以定义构造函数,类可以定义构造函数
 6.接口不能用来创建对象,类可以用来创建对象

4.抽象类
 定义抽象类的关键字是abstract class
 抽象类是介于接口和类之间的一种类。
 定义抽象类的格式:
 public abstract class 抽象类名{
  //抽象类中可以定义私有、受保护的、公有的属性、方法和构造函数。
  //抽象类还可以定义抽象方法
  public abstract 返回类型 方法名([参数类型 参数名,...]);
 }

 抽象类不可以用来创建对象。

5.监听器
 监听器就是用来监听动作的方法。
 实现整个监听的流程:接收监听的对象、监听方法、处理监听的对象
 常用的监听器接口都位于java.awt.event包下,以Listener结尾的都是监听接口。

 

 

事例  类的继承:窗体绘制皆继承于JFrame;

              接口:监听器的运用

 

具体体现:qq窗体的绘制

import cn.netjava.login.LoginListener;

/**
 * qq登陆界面
 * 
 * @author Administrator
 * 
 */
public class Frame {
	public static void main(String[] args) {
		Frame f = new Frame();
		f.showUI();// 下面要定义show方法
	}

	// 显示界面show方法
	public void showUI() {
		// 创建窗体
		javax.swing.JFrame jf = new javax.swing.JFrame();
		// 设置窗体
		jf.setTitle("登陆框");
		jf.setSize(321, 250);
		jf.setResizable(false);
		jf.setLocationRelativeTo(null);
		jf.setDefaultCloseOperation(2);

		// 设置布局-绝对布局
		jf.setLayout(null);

		// 创建组件
		// 1、图片(要有参数)
		javax.swing.ImageIcon image = new javax.swing.ImageIcon(this.getClass()
				.getResource("qq.jpg"));
		javax.swing.JLabel myimage = new javax.swing.JLabel(image);
		myimage.setBounds(0, 0, 321, 64);
		jf.add(myimage);
		// 创建"帐号"
		javax.swing.JLabel myName = new javax.swing.JLabel("帐号:");
		myName.setBounds(30, 74, 50, 25);
		jf.add(myName);
		// 创建文本框
		javax.swing.JTextField txtName = new javax.swing.JTextField(20);
		txtName.setBounds(95, 74, 120, 25);
		jf.add(txtName);
		// 创建“密码”
		javax.swing.JLabel myPassword = new javax.swing.JLabel("密码:");
		myPassword.setBounds(30, 115, 50, 25);
		jf.add(myPassword);
		// 创建密码输入框
		javax.swing.JPasswordField txtPassword = new javax.swing.JPasswordField(
				20);
		txtPassword.setBounds(95, 115, 120, 25);
		jf.add(txtPassword);
		// 创建”注册新帐号"
		javax.swing.JLabel myReg = new javax.swing.JLabel("注册新密码");
		myReg.setBounds(230, 74, 90, 25);
		jf.add(myReg);
		// 创建”找回密码“
		javax.swing.JLabel myReturn = new javax.swing.JLabel("找回密码");
		myReturn.setBounds(230, 115, 90, 25);
		jf.add(myReturn);

		// 创建“登陆”
		javax.swing.JButton myLogin = new javax.swing.JButton("登陆");
		myLogin.setBounds(245, 180, 60, 25);
		jf.add(myLogin);

		// 创建“设置”
		javax.swing.JButton myset = new javax.swing.JButton("设置");
		myset.setBounds(30, 180, 65, 25);
		jf.add(myset);

		// 创建状态
		javax.swing.JLabel mysit = new javax.swing.JLabel("状态:");
		mysit.setBounds(40, 150, 50, 25);
		jf.add(mysit);
		javax.swing.JComboBox myBox = new javax.swing.JComboBox();
		myBox.addItem("我在线上");
		myBox.addItem("Q我吧");
		myBox.addItem("离开");
		myBox.addItem("忙碌");
		myBox.addItem("请勿打扰");
		myBox.addItem("隐身");
		myBox.setBounds(90, 150, 60, 25);
		jf.add(myBox);

		// 创建勾选项
		javax.swing.JCheckBox myCheck1 = new javax.swing.JCheckBox();
		myCheck1.setBounds(160, 150, 25, 25);
		jf.add(myCheck1);

		javax.swing.JLabel myRem = new javax.swing.JLabel("记住密码");
		myRem.setBounds(190, 150, 50, 25);
		jf.add(myRem);

		javax.swing.JCheckBox myCheck2 = new javax.swing.JCheckBox();
		myCheck2.setBounds(200, 150, 25, 25);
		jf.add(myCheck2);

		javax.swing.JLabel myzi = new javax.swing.JLabel("自动登录");
		myzi.setBounds(230, 150, 50, 25);
		jf.add(myzi);
		
		//创建一个LoginListener类的对象
		LoginListener ll = new LoginListener(txtName,txtPassword);
		//给事件源添加监听器方法以及给方法绑定事件处理类对象
		myLogin.addActionListener(ll);


		jf.setVisible(true);

	}
}

 

/**
 * 创建动作处理类
 * @author Administrator
 *
 */
 //引入ActionEvent类和ActionListener接口
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class LoginListener implements ActionListener{
	//定义属性
	private javax.swing.JTextField txtName;
	private javax.swing.JPasswordField txtPassword;

	//应为ActionListener为接口,要重写他的方法(动作处理方法)
	public void actionPerformed(ActionEvent e){

		//得到输入的账号和密码
		String username =txtName.getText();
		char [] pwd =txtPassword.getPassword();
		String password = new String(pwd);
		//如果账号与密码输入正确
		if(username.equals("12345")&&pwd.equals("12345")){
			//弹出消息框
			javax.swing.JOptionPane.showMessageDialog(null,"输入正确,请等待...");
		}else{
			//弹出消息框
			javax.swing.JOptionPane.showMessageDialog(null,
			"你输入的账号和密码错误,请重新输入!");
		}

	}
	//创建一个带参数的构造函数(即创建对象)
	public LoginListener(javax.swing.JTextField txtName,javax.swing.JPasswordField txtPassword){
		this.txtName =txtName;
		this.txtPassword =txtPassword;
	}
}



 

部分总结:

1、窗体上组件排布时可运用绝对布局、流式布局等多种布局方式;

                  2、窗体上大部分组件可从API文档下javax.swing包内找到,例如JLable,JCheckBox 等组件;

                  3、jf.setDefaultCloseOperation(3);表示点击窗体的关闭按钮时执行的方法。

          3表示隐藏窗口并退出程序;

          2表示如果存在父窗体,则隐藏窗体,不退出程序,如果没有父窗体,则隐藏窗体并退出程序;

          1表示隐藏窗体但程序不退出;

          0表示什么也不做。

                  4、在窗体绘制中,可用继承来代替实例化一个Frame对象:

public class Frame extends javax.swing.JFrame {

	/**
	 * 主函数
	 */
	public static void main(String[] args) {
		// 创建Frame的对象
		Frame df = new Frame();
		// 调用显示界面的方法
		df.showUI();
	}

	/**
	 * 定义一个显示界面的方法
	 */
	public void showUI() {
		// 设置窗体
		this.setTitle("qq");
		this.setSize(600, 500);
		

 

此时,设置窗体是用当前对象this,不用df;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值