interface LayoutManager{
void show();
}
class FlowLayout implements LayoutManager{
public void show(){ System.out.println("这是流式布局!"); }
}
class BorderLayout implements LayoutManager{
public void show(){ System.out.println("这是边界布局!"); }
}
class GridLayout implements LayoutManager{
public void show(){ System.out.println("这是卡片布局!"); }
}
class Panel {
Panel(){
System.out.println("空构造函数");
}
Panel(LayoutManager layout){ //这里面的LayoutManager是什么,这句话是什么意思
layout.show();
}
void add(Object obj){ //object obj什么意思
System.out.println("添加组件啦");
}
void showAllInfo(){
System.out.println("要显示属性啦");
}
}
public class Nineth {
public static void main(String[] args) {
GridLayout layout=new GridLayout();
Panel pan=new Panel(layout);
}
} 这个程序的执行顺序是什么?谢谢!
2012-11-24 09:05提问者采纳
 
LayoutManager是接口,开始就定义了interface LayoutManager;
Object是对象基本类型,可以理解为所有对象的父类。
Object obj就是定义一个Object类的obj
执行顺序,接口的执行顺序有很多,只要你调用了就会执行,调用的顺序就是执行的顺序,如果没调用,可能一辈子都不会执行。
提问者评价
谢谢!
评论|1
按默认排序|按时间排序

其他2条回答

2012-11-24 11:21求购库锦|五级
第一个问题:
1.首先,我们从main函数入手开始看,
GridLayout layout=new GridLayout();
实例化GridLayout这个类,我们需要观察该类的构造函数和继承状态 2.OK,没有带参数的构造函数,那么看到class GridLayout implements LayoutManager意思是实现了LayoutManager这个接口
interface LayoutManager 这个接口定义了show() 方法,并在GridLayout 实现(重写)了该方法。
GridLayout layout=new GridLayout();执行完毕。 3.Panel pan=new Panel(layout);
实例化Panel 这个类,我们需要观察该类的构造函数和继承状态 4,OK,我们看到Panel 类就两个构造函数,一个是无参数的,还有一个是Panel(LayoutManager layout)构造函数,LayoutManager是什么呢?为什么能传入GridLayout 类的变量作为参数而不是GridLayout 类型的参数呢?
OK,我们看到LayoutManager是一个接口,接口被GridLayout 实现,刚才也说过class GridLayout implements LayoutManager意思是实现了LayoutManager这个接口
也就是说,我们的GridLayout 跟 接口LayoutManager 显然存在着继承关系。 OK。我们仔细观察不难发现之间存在的关系。
<1>,有继承的存在。 GridLayout implements LayoutManager 。
<2>,有重写,刚说过GridLayout 实现(重写)了show方法。
<3>,在你的疑问里,LayoutManager layout,既然能传入,证明作者的设计LayoutManager 跟GridLayout 存在着继承的关系,并在这里,GridLayout 的引用变量layout作为实参传入了该构造函数,那么LayoutManager layout这个形参就指向了GridLayout 类的实例。 那么为什么父类引用能指向子类的实例?有什么好处? 这种设计方式是java语言的核心基础,称之为多态!不知道多态是什么?赶紧去面壁,然后翻书。
这么做的好处?简单来说就是,我们加入新的子类到程序中时,(就像你这个程序里的FlowLayout的加入) ,不必重写或修改处理这个类型的程序(这里就是不需要增加令一个参数类型的构造函数)给程序员提供了非常非常大的便利(不需要修改构造函数难道不便利么?)。
关于多态,你需要仔细阅读java书籍才能弄懂更多的细节。
继续说程序,layout.show()在构造函数中被调用,System.out.println("这是卡片布局!"),输出这是卡片布局。
Panel pan=new Panel(layout);执行结束了。然后main方法结束。程序结束。
第一个问题结束! 第二个问题:
void add(Object obj){ //object obj什么意思
System.out.println("添加组件啦");
}
这里的Panel 类中,有一个add方法,这个方法在程序中没有被调用,所以该程序再执行过程中没它什么事。我们来分析一下这个add方法。
Object obj在该方法中作为形参准备接收调用该方法时传来的实参,OK。
Object 是什么?Object 是java所有类的最终的基类。你定义的所有类,都默认extends Object。也就是说,在这里,不管传入什么东西,肯定是父类引用指向子类实例。
这跟上面一样,还是多态的使用。 关于object类和多态,还是需要看书继续深化理解。所以,骚年,任重道远,这只是开始的开始的开始。 但是,基础至关重要。
评论|0
2012-11-24 10:04CurseSlime|一级
LayoutManager是个接口,定义了一个方法show(),所有implements这个接口的类都要实现这个方法。
你在main方法里面new一个GridLayout,然后再把它置到panel里面。
panel在构造时,使用了 Panel(LayoutManager layout){ //这里面的LayoutManager是什么,这句话是什么意思
这个构造方法,所以它全执行这个方法的layout.show();
所以GridLayout的show方法也要执行。
结果只打印一句
这是卡片布局! 未测试,不保证结果,哈。

swing LayoutManager 和多态的更多相关文章

  1. Java Swing 探索(一)LayoutManager

    BorderLayout FlowLayout GridLayout GridBagLayout CardLayout BoxLayout 1.BorderLayout java.lang.Objec ...

  2. Java第4次实验提纲(面向对象2-继承、多态、抽象类与接口与Swing)

    PTA 题集面向对象2-进阶-多态接口内部类 第1次实验 1.1 题集5-1(Comparable) 难点:如果传入对象为null,或者传入对象的某个属性为null,怎么处理? 1.2 题集5-2(C ...

  3. 运用 Swing

    一:Swing的组件: 组件(component,或称原件)就是你会放在GUI上的东西,这些东西用户可以看到并可以与之交互. 组件是可以嵌套的. 创建GUI的四个步骤: 1.创建window(JFra ...

  4. swing的第一课

    Swing介绍 Swing API 可扩展 GUI组件,以减轻开发者的生活创造基于JAVA前端/GUI应用.它是建立在AWT API之上,并作为 AWTAPI 的更换,因为它几乎每一个控制对应 AWT ...

  5. (转)Java 的swing.GroupLayout布局管理器的使用方法和实例

    摘自http://www.cnblogs.com/lionden/archive/2012/12/11/grouplayout.html (转)Java 的swing.GroupLayout布局管理器 ...

  6. Swing布局管理器

    在Swing中使用的所有布局管理器都可以实现LayoutManager接口.Swing中有五种常见的布局管理器分别为FlowLayout.BorderLayout.GridLayout.CardLay ...

  7. Java 的swing.GroupLayout布局管理器的使用方法和实例(转)

    The following builds a panel consisting of two labels in one column, followed by two textfields in t ...

  8. Java学习之旅基础知识篇:面向对象之封装、继承及多态

    Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...

  9. Swing学习篇 API之JButton组件

    按钮(Jbutton) Swing中的按钮是Jbutton,它是javax.swing.AbstracButton类的子类,swing中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且还可 ...

随机推荐

  1. 工作流学习——Activiti流程定义管理三步曲 (zhuan)

    http://blog.csdn.net/zwk626542417/article/details/46602419 ***************************************** ...

  2. python操作mongodb之基础操作

    #coding:utf-8 __author__ = 'hdfs' import pymongo from pymongo import MongoClient client = MongoClien ...

  3. js里面获取三位不重复值

    <html><body> <script type="text/javascript"> var d = new Date();var sz = ...

  4. 浅析KMP算法

    浅析KMP算法 KMP算法是一种线性字符串的匹配算法,将主串S与模式串T匹配. 首先朴素算法大家都会,就是直接从S的每一个位置开始,枚举比较,时间效率为O(nm),现在要想到一种化简的方式,使得时间复 ...

  5. 谈谈JPA-02-HelloWorld

    使用JPA持久化对象的步骤 创建 persistence.xml, 在这个文件中配置持久化单元 需要指定跟哪个数据库进行交互; 需要指定 JPA 使用哪个持久化的框架以及配置该框架的基本属性 创建实体 ...

  6. Qt之QSystemTrayIcon

    简述 QSystemTrayIcon类为应用程序在系统托盘中提供一个图标. 现代操作系统通常在桌面上提供一个特殊的区域,称为系统托盘或通知区域,长时间运行的应用程序可以显示图标和短消息. 简述 内容 ...

  7. Linux基础: 挂载镜像文件(Mount & ISO)

    ISO/Ghost 镜像文件概念(裸机安装,无光驱安装,跨平台安装) ISO是镜像文件:所谓镜像文件其实和ZIP压缩包类似,它将特定的一系列文件按照一定的格式制作成单一的文件,以方便用户下载和使用,例 ...

  8. MyBatis实体类映射文件模板

      <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC " ...

  9. Java学习之约瑟夫环的两中处理方法

    package day_2; import java.util.Scanner; /** * @author Administrator * 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围 ...

  10. 高度30px,宽度自适应,点线在文字中间

    <style>  .div{ position: relative; width: 100%; height: 30px; background: #ffff00}        .div ...