黑马程序员技术交流社区
标题:
问个简单的问题!!!
[打印本页]
作者:
罗衎
时间:
2011-7-29 01:47
标题:
问个简单的问题!!!
为什么一些构造方法中要首现出现一下Super()?
作者:
詹季春
时间:
2011-7-29 02:03
:) 这样说吧,就是为了提现程序的后期维护,
因为对于一个
构造方法,子类是不能继承的,那么可以通过super来调用,
但是子类不仅有父类的属性还有子类特有的属性,如下面的例子可以看到,如果我以后需要修改父类的属性,那么子类的属性是通过super来调用的,这样就无须修改子类的属性,如果我们是吧父类的构造器在子类重新定义一边的话,那么对于一个或少数子类这样修改没问题,但是以后的项目当中万一有成千上万,那么这就是一个工程相当大的问题
对于下面这两个类[code=java]package cn.itcast.heima
class Base
{
public double size;
public String name;
public Base(double size , String name)
{
this.size = size;
this.name = name;
}
}
public class Sub extends Base
{
public String color;
public Sub(double size , String name , String color)
{
//通过super调用来调用父类构造器的初始化过程
super(size , name);
this.color = color;
}
public static void main(String[] args)
{
Sub s = new Sub(5.6 , "测试对象" , "红色");
//输出Sub对象的三个属性
System.out.println(s.size + "--" + s.name + "--" + s.color);
}
}[/code]
[
本帖最后由 詹季春 于 2011-07-29 02:05 编辑
]
作者:
匿名
时间:
2011-7-29 02:16
标题:
回复 楼主 的帖子
与普通方法相比,构造方法很特殊。构造方法不能被继承,无法被覆盖,不能直接调用,没有返回值。
自己写的一个简单的小例子看下运行结果[code]class MyA
{
public MyA(){
System.out.println("1");
}
public void print()
{
System.out.println("A");
}
}
class MyB extends MyA
{
public MyB(){
super();
System.out.println("2");
}
public void print()
{
System.out.println("B");
}
}
public class test1
{
public static void main(String[] args)
{
MyB a = new MyB();
a.print();
}
} [/code]1
2
B
作者:
匿名
时间:
2011-7-29 09:26
class A {
A(){
System.out.println(’‘父类无参的构造方法'');
}
A(int age){
System.out.println ('''ather is''+age+''有参的构造方法'');
}
}
class B extends A{
B(){
super(30);
System.out.println("B");
}
}
就是说在你父类不止一个构造函数时,显示的调用super才有意义
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2