`
michaelzjy
  • 浏览: 3515 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

类的继承、接口、抽象类与事件机制基础总结

阅读更多

上回书说到,类和对象(谁的?)大战三百回合。。。二人平分秋色,所以类找来了他的儿子子类来帮忙,子类又找来了他的兄弟接口、抽象类和事件机制帮忙,最后对象(谁的??管他是谁的对象呢~)不敌众人,投入了类的帐下,成为类的两大猛将之一(另一个我不说你们也知道),终于类将各国统一,并自立国家,国号Java,自封James Gosling。。。好扯的一段故事,还真是既没有逻辑有没有常识呐~~

 

上一篇的类和对象的内容可以说是Java最基本的,在我看来像是一棵树的树干,而本篇的这四个点则是类这个树干上分出去的树枝。

 

1、关于类的继承的自己的理解

(1)类之间如果有继承关系的话,那么被继承的类叫做父类,继承的类叫做子类。所以从这个名字上我们也能生动形象想到他们在现实中的类比。

继承的格式

 关键字:extends 
  格式:public void 子类名 extends 父类名{ 
   } 
   其中子类又叫派生类、超类,父类又叫基类。

例如做图形界面时的例子:

 

public class Draw extends JFrame {
}

 

 

 

(2)在课上老师也这样举过例子,子类就像是父类的儿子,继承了父亲的基因,因为有了父亲的所有的特征,所以也有与父亲相同的行为。来,这位小萝莉看样子是不明白子承父亲的基因这件事呢,不明白的话我来给你指导一下吧,你是想要理论课呢还是实践课呢??(大误!!纯属YY)

 

   子类继承了父类的所有属性和方法 

  【1】访问修饰符关键字(大小关系按顺序从小到大) 
  private 只能在类中使用 
  默认的  只能在同包中使用 
  protected 只能在同包中使用 
  public  在所有情况下均可使用 

  【2】同包中能使用的有: 
    默认的、protected、public均可在子类的{}和子类的对象中调用; 

  【3】不同包中能使用的有: 
    public在子类的{}和子类的对象中均可调用; 
    protected只能在子类的对象中调用。 

 

import java.awt.Dimension;

import javax.swing.JFrame;


public class Calculator extends JFrame{
		public static void main(String[] args){
			Calculator cal=new Calculator();
			cal.initUI();
		}

		private CalculatorListener cl;
		public void initUI(){
			//窗体基本设置
			JFrame jf=new JFrame();
			jf.setSize(220,315);
			jf.setLocationRelativeTo(null);
			jf.setTitle("计算器");
			jf.setDefaultCloseOperation(3);
			jf.setResizable(false);
			jf.setJMenuBar(JMB());
                        jf.setVisibale(true);
}
}

 

 

(3)但是儿子肯定不能和父亲一模一样,所以他可以有自己独有的特征,有自己独有的行为。所以在子类中也可以定义属性和方法或是进行方法的重写。

   方法重写 
  条件:【1】.有继承关系; 
            【2】.方法在子类和父类中的返回值类型、类名、参数的个数、顺序和类型完全相同; 
            【3】.其中方法的访问修饰符可以不相同,但是子类的访问修饰符一定大于等于父类的访   
                      问修饰符。 
   调用: 
            【1】.先确定new的对象是谁的,那么就会优先执行谁的方法; 
            【2】.子类没有则调用父类的方法。 

 

import javax.swing.JFrame;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class Calculator extends JFrame{
//方法重写	
private JMenuBar JMB(){
		JMenuBar jmb=new JMenuBar();
		JMenu jm1=new JMenu("查看");
		JMenu jm2=new JMenu("编辑");
		JMenu jm3=new JMenu("帮助");
		
		JMenuItem jmi1=new JMenuItem("1");
		JMenuItem jmi2=new JMenuItem("2");
		JMenuItem jmi3=new JMenuItem("3");

		jm1.add(jmi1);
		jm2.add(jmi2);
		jm3.add(jmi3);
	
		
		jmb.add(jm1);
		jmb.add(jm2);
		jmb.add(jm3);
		
		return jmb;
		
		
		}
}

 2、接口

 

写到这里,由实现接口和继承父类的区别的突然想到了一个很现实的比喻,啊怎么办,写不写上来呢,感觉这个比喻有点,额,怎么说,不着边际,而且要表达起来也很麻烦,写起来还浪费时间现在也够晚了。。。算了吧,还是写上来吧~

所以他们的区别在我看来很像开明的爸爸和保守的爸爸的区别,你猜那个是开明的爸爸呢?猜对有奖~~奖励就是告诉你父类像是开明的爸爸,而接口则是保守的爸爸~~蠢话

何谓三观?即世界观,人生观和价值观。三者为递进关系,前一个决定着下一个,所以才说,视野决定一切,视野即世界观,有了好的世界观才有好的人生观,进而才能有好的价值观。对于一个人,有了好的三观(请严肃对待这个词= = ||),才能有可能在当下立足。(天呐,我这是怎么了,越写越跑是要闹哪样。。。)反过来推,多数事业有成的人会有一个相对好的三观,而多数卢瑟则可能不会有。啊,终于要回正题来了。所以一个事业有成的爸爸会较开明,卢瑟老爸则是较保守。同理,父类相较接口也是显得较开明和事业有成,首先,父类里的方法相较接口里的抽象方法是具体的有内容的,所以我们可以把它比喻成事业有成,而同时,子类里可以选择性的实现父类的方法,而不用像接口一样必须实现所有的抽象方法,这个我们可以把他比喻成开明,所以有没有很形象捏~~我怎么这么啰嗦叫喊。。。

(1) 定义接口的格式

定义接口的关键字是:interface

格式:

public interface 接口名 extends 接口名,...  {

//常量

public static final 数据类型 常量名  = 值;

//抽象方法

public 返回值数据类型  方法名(数据类型 参数名,...);

}

以MouseListener这个接口为例:

 

public interface MouseListener extends EventListener {

    public void mouseClicked(MouseEvent e);

    public void mousePressed(MouseEvent e);

    public void mouseReleased(MouseEvent e);

    public void mouseEntered(MouseEvent e);

    public void mouseExited(MouseEvent e);
}

 

(2) 实现接口的格式

实现接口的关键字是:implements

格式:

public class 类名 extens 类或者抽象类 implements 接口名,... {

 

//当类实现接口后,那么类必须要实现接口中所有的抽象方法

 

}

以实现键盘监听器接口为例:

 

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class KeyClick implements KeyListener{
	
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent e) {

}
}

 

(3) 使用接口的注意事项

【1】.定义接口的关键字的关键字

【2】.接口只能定义常量和抽象方法

【3】.接口可以继承多个接口

【4】.接口中默认的访问修饰符是public

【5】.实现接口的关键字

【6】.实现接口后必须要实现接口中所有的抽象方法

【7】.接口也是一种类

【8】.接口不能用来实例化对象

 

(4)接口的优点:类的继承是单继承,那么有了接口,就可以丰富类的继承。

         类可以先继承类,然后再去实现接口

3、抽象类

(1)定义

定义抽象类的关键字是:abstract class

public abstract class 抽象类名 {

//定义类中所有的属性和方法

 

//定义接口中的常量和抽象方法

public abstract 返回值数据类型 方法名(数据类型 参数名,...);

}

(2)实现

public class 类名或者抽象类 extends 抽象类名{

//实现抽象类中所有的抽象方法。

}

注意:如果是类去继承抽象类,那么类必须要实现所有的抽象方法。

        关于抽象类的这个我还没有很了解到底要怎么用,只能之后继续学习了解了

4、事件机制

        (1)事件源

只有Java的图形界面类才能成为事件源.

只要你点击的动作发生在图形界面对象上,那么该图形界面对象

就是事件源。

 

(2)事件监听器方法

让事件源可以随时监听对应的操作.

事件源对象.add**Listener(**Listener l);

 

(3)事件处理类对象

事件处理类,事件要执行的最终代码。

public class 类名 implements **Listener {

//重写事件接口中的抽象方法

}

最后整体以QQ界面以例,嫌长的可以不往下看了,因为代码之后就没有了~

写到这里正好发现自动保存的时间很有意思,129长跑诶~贴上来自娱一下~

 

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;


public class window extends JFrame{
	public static void main(String[] args){	
	window win=new window();
		win.initUI();
	}
		public void initUI(){
			JFrame jf=new JFrame();
			jf.setSize(390,320);//界面大小
			jf.setTitle("QQ");//界面名字
			jf.setDefaultCloseOperation(3);//关闭方式
			jf.setLocationRelativeTo(null);//居中
			jf.setResizable(false);			//大小不可调
			
			JPanel jpn=new JPanel();//初始化北面面板对象
			jpn.setOpaque(false);//北面面板透明
			jpn.setPreferredSize(new Dimension(0,142));//北板大小
			jf.add(jpn,BorderLayout.NORTH);//放置北面的面板
			JLabel jl2=new JLabel(" 三宝");//初始化带字的标签页
			jl2.setFont(new Font("迷你简硬笔行书",Font.ROMAN_BASELINE,45));//字体
			jl2.setForeground(Color.black);//字体颜色
			jpn.setLayout(new BorderLayout());//北板边框布局
			jpn.add(jl2,BorderLayout.WEST);//将字放置到北板上
			
			ImageIcon im1=new ImageIcon("Image/QQIM11.jpg");//初始化图片对象
			JLabel  jl1= new JLabel(im1);//初始化标签对象,将图片放置在标签上
			//设置标签的起始位置和标签的大小
			jl1.setBounds(0, 0, im1.getIconWidth(), im1.getIconHeight());
			
			//添加到窗体的LayeredPanel面板的最底层(第二层面板)
			jf.getLayeredPane().add(jl1,new Integer(Integer.MIN_VALUE));
			
			//获取窗体的第一层面板
			JPanel contentPanel = (JPanel)jf.getContentPane();
			//设置第一层面板为透明
			contentPanel.setOpaque(false);

		//初始化东南西中的面板并设为透明	
			JPanel jpc=new JPanel();
			jpc.setOpaque(false);
			JPanel jps=new JPanel();
			jps.setOpaque(false);
			JPanel jpw=new JPanel();
			jpw.setOpaque(false);
			JPanel jpe=new JPanel();
			jpe.setOpaque(false);
			
			jpw.setLayout(new BorderLayout());//设置西边面板布局为边框布局
			
			jpe.setPreferredSize(new Dimension(79,50));//设置东边面板大小
			jpw.setPreferredSize(new Dimension(100,50));//西边
			
			
			//三个按钮
			JButton bn=new JButton("登          录");
			JButton bn1=new JButton("注册账号");
			JButton bn2=new JButton("找回密码");
			//中间面板的下拉框
			JComboBox cb=new JComboBox();
			cb.setEditable(true);//可编写
			//中间面板的密码输入
			JPasswordField pf=new JPasswordField();
			//两个复选框
			JCheckBox cb1=new JCheckBox("记住密码");
			JCheckBox cb2=new JCheckBox("自动登录");
			//两个复选框隐藏
			cb1.setOpaque(false);
			cb2.setOpaque(false);
			//西面的头像
			ImageIcon im=new ImageIcon("Image/QQIM6.jpg");
			JLabel jl=new JLabel(im);
			jpw.add(jl,BorderLayout.NORTH);
			//上述组件设置大小及字体
			cb.setPreferredSize(new Dimension(185,26));
			pf.setPreferredSize(new Dimension(185,26));
			bn.setPreferredSize(new Dimension(145,30));
			bn1.setPreferredSize(new Dimension(80,26));
			bn2.setPreferredSize(new Dimension(80,26));
			bn.setFont(new Font("微软雅黑",Font.BOLD,12));
			bn1.setFont(new Font("微软雅黑",Font.BOLD,11));
			bn2.setFont(new Font("微软雅黑",Font.BOLD,11));
			
			//上述组件添加到相应位置
			jpc.add(cb);
			jpc.add(pf);
			jpc.add(cb1);
			jpc.add(cb2);
			jps.add(bn);
			jpe.add(bn1);
			jpe.add(bn2);
			
			//将各面板添加到窗体各位置
			jf.add(jpc,BorderLayout.CENTER);
			jf.add(jps,BorderLayout.SOUTH);
			jf.add(jpw,BorderLayout.WEST);
			jf.add(jpe,BorderLayout.EAST);
			
			
			LoginListener l=new LoginListener(pf);
			bn.addActionListener(l);
			//设置可见
		    jf.setVisible(true);
		}
		}
		

 

实现监听器

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

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;

public class LoginListener implements ActionListener{
	private JPasswordField pf;	
	
	public LoginListener(JPasswordField pf){
		
		this.pf=pf;	
		}
	

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		char[] s=pf.getPassword();		 
		if (s.equals("gemma")){
			 JFrame jf=new JFrame();
			 jf.setTitle("Gemma");
			 jf.setSize(200,700);
			 jf.setDefaultCloseOperation(3);
			 
			 jf.setVisible(true);
	}
		 else{JOptionPane.showMessageDialog(null,
					"你输入的账号错误,请重新输入!");
			 
		 }
	}
}

 

  • 大小: 3.2 KB
分享到:
评论

相关推荐

    实验项目C、面向抽象和面向接口编程

    2.接口机制的多态基础 3.面向接口编程 4.匿名类 5.[选做]函数式接口和lambda表达式 三、实验结论和思考 1、问题:开发一个应用,模拟计算机对移动存储设备的读写,即移动存储设备有U盘、手机卡、移动硬盘、闪卡等...

    实验四:Java继承与接口

    本次实验理解继承原理与机制及类继承的声明方法,掌握了成员变量的隐藏及方法的重写和抽象类与抽象方法,掌握了super和final关键字,理解了多态的内涵及实现代码,掌握接口的声明和使用等。

    深度探索C ++ 对象模型,内容概要:多态是一种威力强大的设计机制,允许你继承一个抽象的public接口之后,封装相关的类型,需要付出的代价就是额外的间接性--不论是在内存的获得,或是在类的决断上,C++通过class的pointer和references来支持多态,这种程序风格就称为"面向对象"。

    深度探索C++对象模型,内容概要:多态是一种威力强大的设计机制,允许你继承一个抽象的public接口之后,封装相关的类型,需要付出的代价就是额外的间接性--不论是在内存的获得,或是在类的决断上,C++通过class的pointer...

    PHP OPP机制和模式简介(抽象类、接口和契约式编程)

    抽象类机制中总是要定义一个公共的基类,而将特定的细节留给继承者来实现。通过抽象概念,可以在开发项目中创建扩展性很好的架构。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为...

    计算机类基础问题

     C++语言考查的重点主要有:多继承,抽象类,虚函数,拷贝构造函数,析构函数, 动态联编,多态,const,static。以下是我面试中遇到的问题: 1)你听说过拷贝构造函数吗?能具体说一下它的作用吗?(汉略) 。。。...

    基于JAVA SMART系统-系统框架设计与开发(源代码+论文).zip

    Java程序设计语言提供了两种机制,可以用来定义一个允许多个实现的类型:接口和抽象类。两种机制之间最明显的区别是,抽象类允许包含某些方法的实现,但是接口是不允许的。一个更为重要的不同之处在于,为了实现一个...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    抽象类和接口 代码块和代码执行顺序 Java自动拆箱装箱里隐藏的秘密 Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入理解内部类 javac和javap Java8...

    Java语言程序设计实验指导书

    5 抽象类、接口与内部类 编写程序实现类的继承、与接口的编写。 6 异常 编程实现处理异常的语句,理解处理与抛出的区别,学会自定义异常。 7 Java流 用输入输出流实现从一个文本文件中读写简单数据。 8 泛型与容器...

    java编程基础,应用与实例

    第9章 抽象类与接口 136 9.1 抽象类 136 9.2 final关键字 138 9.3 接口 139 9.4 Cloneable 接口 143 9.5 Enumeration接口 144 9.6 巩固练习 145 第10章 内隐类(inner class) 146 10.1 静态类...

    JAVA基础课程讲义

    抽象类的使用要点 83 接口 83 为什么需要接口? 84 如何定义接口? 84 接口的本质探讨 84 接口使用要点 85 接口的多继承 86 面向接口编程 87 OOP更多应用 87 组合 87 内部类(innerclasses) 88 字符串(java.lang....

    《Java开发宝典[精品]》陈丹丹 李银龙.epub

    主要包括如何学好编程、Java语言概述、主流开发工具、Java语言基础、流程控制、Java数组、字符串、面向对象编程基础、继承、封装和多态、抽象类与接口、Java的类中类、包装类、数字类、集合类、格式类、输入输出、...

    【05-面向对象(下)】

    •接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。 接口与抽象类的区别 •接口里只能包含抽象方法,不同包含已经提供实现的方法;抽象类则完全可以包含普通...

    C#编程从基础到实践

    第3部分引入C#编程的接口、文件和流操作的相关内容,包括接口定义与实现、抽象类与接13、文件读写和流的操作。第4部分开始介绍C#网络编程基础,内容包括网络通信量的监视、TCP和UDP编程简介、DNS的使用和套接字编程...

    java语言程序设计 java编程笔记 由浅入深的笔记 共32份 全套资源.rar

    【完整课程列表】 API集合.docx ...接口和抽象类以及实现类.docx 枚举enum.docx 设计模式.docx 数组.docx 网络编程.docx 线程和内部类.docx 循环和类对象.docx 异常.docx 正则表达式.docx 总结.docx

    Java工程师面试复习指南

    抽象类和接口 代码块和代码执行顺序 Java自动拆箱装箱里隐藏的秘密 Java中的Class类和Object类 Java异常 解读Java中的回调 反射 泛型 枚举类 Java注解和最佳实践 JavaIO流 多线程 深入理解内部类 javac和javap Java8...

    Java基础知识点pdf

    Java基础知识点pdf: 数据类型、继承、封装、多态、数组、循环、抽象类、接口、object类常用方法、异常处理机制

    java基础.doc

    包含java安装,下载java编辑器,变量和数据类型,基础语法,数组,类和对象,字符串的操作方法,值传递或引用传递, static静态,封装,方法的重写,继承,抽象类和抽象方法,多态,接口,内部函数,异常机制,IO流...

    java第五章最终

    5.1消息 5.2 访问控制 5.3 多态机制 5.4 继承机制 5.5 抽象类、接口与包

    java 面试题 总结

    接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类...

Global site tag (gtag.js) - Google Analytics