class Circle
{
double x,y,r;
//构造方法初始化
public Circle(double x,double y,double r)
{
this.x=x;
this.y=y;
this.r=r;
}
public Circle()
{
}
/*
*因为你在Circle类里自己创建了有参构造函数,那么系统不会再自动生成无参的构造函数。
子类会无条件继承父类无参构造函数,而你父类里没有无参构造函数,子类继承时会报错,这个一定要注意。
*
**/
}
public class Cylinder extends Circle
{
public static void main(String []args)
{
Circle pxy=new Circle(1.0,2.0,3.0);
}
}
/*
请记住:
子类无条件继承父类无参构造函数,而你在父类定义有参构造函数,系统不在生成无参构造函数,此时父类没有无参构造函数,子类继承既报错,
*/
// 1:无参数构造方法。
class A{ public A()
{
// 2
public A(String s)
{
}
}
class B extends A
{
public B(String s)
{ super(s); // 3. }
}
说明:如果没有1处的无参数构造方法,那么3处一定要主动调用父类带参数的构造方法。如果有1处的构造方法,那么3处代码可以不要,因为Java会自动默认调用父类的无参数构造方法。
记住一点:在构造子类时,一定会调用到父类的构造方法。所以父类要么有一个默认的无参数构造,这样Java会自动调用这个无参数的构造。如果父类没有无参数的构造,那么就要你自己在子类的构造中,通过super()的方式调用父类的构造。
1、关键点:构造子类时会先构造父类。
现象:父类的属性和方法,只要不是私有的,子类都可以当作是自己的来用。原因就在于构造子类时,父类也被构造了。
2、构造方法:每个类都会默认存在一个无参构造方法,但当类中存在有参构造方法时,不再默认存在无参构造方法。
3、继承:构造子类时,会默认调用父类的无参构造函数来构造父类。但父类存在有参构造方法时,就找不到父类的无参构造方法了。
4、解决:(1)在父类添加无参构造方法,构造子类时,会默认去调用无参构造方法构造父类。(2)子类构造方法中,显示调用父类的有参构造方法来构造父类。
编译器会自动检测这种继承关系是否正确,不正确就会报错,而不是说在运行时new出父类就可以的