swing LayoutManager 和多态
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);
}
}
这个程序的执行顺序是什么?谢谢!

其他2条回答
第一个问题:
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类和多态,还是需要看书继续深化理解。所以,骚年,任重道远,这只是开始的开始的开始。 但是,基础至关重要。
LayoutManager是个接口,定义了一个方法show(),所有implements这个接口的类都要实现这个方法。
你在main方法里面new一个GridLayout,然后再把它置到panel里面。
panel在构造时,使用了 Panel(LayoutManager layout){ //这里面的LayoutManager是什么,这句话是什么意思
这个构造方法,所以它全执行这个方法的layout.show();
所以GridLayout的show方法也要执行。
结果只打印一句
这是卡片布局! 未测试,不保证结果,哈。
swing LayoutManager 和多态的更多相关文章
- Java Swing 探索(一)LayoutManager
BorderLayout FlowLayout GridLayout GridBagLayout CardLayout BoxLayout 1.BorderLayout java.lang.Objec ...
- Java第4次实验提纲(面向对象2-继承、多态、抽象类与接口与Swing)
PTA 题集面向对象2-进阶-多态接口内部类 第1次实验 1.1 题集5-1(Comparable) 难点:如果传入对象为null,或者传入对象的某个属性为null,怎么处理? 1.2 题集5-2(C ...
- 运用 Swing
一:Swing的组件: 组件(component,或称原件)就是你会放在GUI上的东西,这些东西用户可以看到并可以与之交互. 组件是可以嵌套的. 创建GUI的四个步骤: 1.创建window(JFra ...
- swing的第一课
Swing介绍 Swing API 可扩展 GUI组件,以减轻开发者的生活创造基于JAVA前端/GUI应用.它是建立在AWT API之上,并作为 AWTAPI 的更换,因为它几乎每一个控制对应 AWT ...
- (转)Java 的swing.GroupLayout布局管理器的使用方法和实例
摘自http://www.cnblogs.com/lionden/archive/2012/12/11/grouplayout.html (转)Java 的swing.GroupLayout布局管理器 ...
- Swing布局管理器
在Swing中使用的所有布局管理器都可以实现LayoutManager接口.Swing中有五种常见的布局管理器分别为FlowLayout.BorderLayout.GridLayout.CardLay ...
- Java 的swing.GroupLayout布局管理器的使用方法和实例(转)
The following builds a panel consisting of two labels in one column, followed by two textfields in t ...
- Java学习之旅基础知识篇:面向对象之封装、继承及多态
Java是一种面向对象设计的高级语言,支持继承.封装和多态三大基本特征,首先我们从面向对象两大概念:类和对象(也称为实例)谈起.来看看最基本的类定义语法: /*命名规则: *类名(首字母大写,多个单词 ...
- Swing学习篇 API之JButton组件
按钮(Jbutton) Swing中的按钮是Jbutton,它是javax.swing.AbstracButton类的子类,swing中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且还可 ...
随机推荐
- IE6 + png24 透明图片(滤镜)
IE6 + png24 透明图片(滤镜) .IE6png{_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true ...
- 基因组组装工具之 SOAPdenovo 使用方法
SOAPdenovo是一个新颖的适用于组装短reads的方法,能组装出类似人类基因组大小的de novo草图. 该软件特地设计用来组装Illumina GA short reads,新的版本减少了在图 ...
- Windows菜单
目录 第1章 Windows菜单 1 1.1 窗口菜单和弹出菜单 1 1.2 使用SetMenu 2 1.3 使用TrackPopupMenu 4 第1章 Windows菜单 ...
- css_兼容IE和FF的写法
CSS对浏览器器的兼容性具有很高的价值,通常情况下IE和Firefox存在很大的解析差异,这里介绍一下兼容要点. 常见兼容问题: 1.DOCTYPE 影响 CSS 处理2.FF:div 设置 marg ...
- iOS应用架构谈 本地持久化方案及动态部署
转载: iOS应用架构谈 本地持久化方案及动态部署 前言 嗯,你们要的大招.跟着这篇文章一起也发布了CTPersistance和CTJSBridge这两个库,希望大家在实际使用的时候如果遇到问题,就给 ...
- 正确理解Spring AOP中的Around advice
Spring AOP中,有Before advice和After advice,这两个advice从字面上就可以很容易理解,但是Around advice就有点麻烦了. 乍一看好像是Before ad ...
- 笔记11:GDI 制作数字验证码
大二学长让我学下GDI绘制验证码,然后自己就试了试了.找了点视频看了下. 现在会画直线,矩形,字符串,制作验证码 一.绘制一条直线 private void button1_Click(object ...
- Word Search [LeetCode]
Problem Description: http://oj.leetcode.com/problems/word-search/ Basic idea: recursively go forward ...
- dubug
1.设置断点 2.启动servers端的debug模式 3.运行程序,在后台遇到断点时,进入debug调试状态 ============================= 作用域 功能 快捷键 全局 ...
- NPOI相关
总结一下工作中遇到的NPOI以及在ASP.NET MVC中的使用 http://www.cnblogs.com/fenglingyi/p/4750323.html