本帖最后由 创造命运 于 2014-4-22 09:44 编辑
下面两句话可以解释为什么你编译不同过。
1.如果一个类你不写构造函数,那么会隐式帮你加个空参数的构造函数;如果你显示写了构造函数,那么这
个类的构造函数就是你写的那个或那些,即使这些构造函数中没有空参数构造函数也不会再帮你隐式加了。
2.子类的构造函数第一行会隐式加个super()调用父类的空参数构造函数;如果父类没有空参数的构造函数,
子类的构造函数第一行要显示的使用 super(参数)来指定调用父类哪个构造函数,不然会编译报错。
SuperPerson(Person p)
{
super( "abc", 10 ); //在代码里加上这句话就OK了。
this.p=p;
}
另外,关于装饰者模式:
1.装饰者模式中要求:装饰者中含有被装饰者的引用.
2.装饰者模式中要求:装饰者和被装饰者应该实现同一个类型.
看如下代码
abstract class Person //定义一个抽象类 { String nam; int ag; pubic abstract void sop(){}; //抽象方法 }
class Student extends Person //定义Student类继承Person { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public void sop() { System.out.println(name+"......"+age); } public String getName() {return this.name;}
public int getAge() {return this.age;} }
class Student1 extends Person //定义Student1类继承Person { Person person; public Student1(Person person) { this.person = person; } public void sop() { person.sop(); System.out.println("My name is tang jian"); //扩展 } }
public class Test { public static void main(String[] args) { Student stu = new Student("tang", 24); Student1 stu1 = new Student1(stu); stu1.sop(); } } 运行结果:
tangjian......24 My name is tang jian
|