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. Struts2的Action中如何操作作用域对象

    得到作用域对象有三种方法,这里用代码来解释: package com.cy.action; import javax.servlet.ServletContext; import javax.serv ...

  2. 20160808_Qt570安装

    1.安装的目录为 “/opt/Qt5.7.0/Tools/QtCreator/bin” 2.建立软连接 [root@localhost bin]# ln -s /opt/Qt5.7.0/Tools/Q ...

  3. jquery中DOM

    节点包裹 wrap() (1)$().wrap(html) 将选择的节点用指定的元素包装 $('p').wrap('<div></div>'); (2)多层包裹 $('p'). ...

  4. HBase之过滤器

    filter ==> SQL 中的Where filter的执行流程: 过滤器在客户端创建,然后通过RPC发送到服务器上,由服务器执行   基础过滤器:   比较器: Comparator  D ...

  5. 用NAN简化Google V8 JS引擎的扩展

    通过C++扩展Google V8 JS引擎的文章很多,Google V8 JS带的例子也容易明白.但是大部分文章都是Hello World型的,真正使用时发现处处是坑.扩展V8最经典的例子就是node ...

  6. Xml反序列化

    XML的反序列化可在类的属性上标记特性来隐射反序列化.例如这种形式 public class PaymentAccount { [XmlAttribute("name")] pub ...

  7. ServletInputStream的重复读取(多次读取)(转)

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  8. 绑定事件 addEventListener

    addEventListener() 方法用于向指定元素添加事件句柄. addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄. 你可以向一个元素添加多个事件句柄. 你可以向 ...

  9. 《javascript高级程序设计》第四章 Variables,scope,and memory

    4.1 基本类型和引用类型的值 primitive and reference values 4.1.1 动态的属性 dynamic properties 4.1.2 复制变量值 copying va ...

  10. response.getWriter().write()与out.print()的区别

    1.首先介绍write()和print()方法的区别:  (1).write():仅支持输出字符类型数据,字符.字符数组.字符串等  (2).print():可以将各种类型(包括Object)的数据通 ...