标签:System 动脑 多态 public 动手 println Grandparent class out
.
TestInherits.java
package Test;
class Grandparent
{
public Grandparent()
{
System.out.println("Grandparent Created.");
}
public Grandparent(String string)
{
System.out.println("Grandparent Created.String:"+string);
}
}
class Parent extends Grandparent
{
public Parent()
{
super("Hello.Grandparent.");
System.out.println("Parent Created");
//super("Hello.Grandparent.");
}
}
class Child extends Parent
{
public Child()
{
System.out.println("Child Created");
}
}
public class TestInherits
{
public static void main(String args[])
{
Child c=new Child();
}
}
但是如果将其中一段改成
public Parent()
{
//super("Hello.Grandparent.");
System.out.println("Parent Created");
//super("Hello.Grandparent.");
}
将super("Hello.Grandparent.");注释后,调用的是GrandParent类的第一个构造函数了。这说明运行子类前必须先运行父类的构造函数,且super方法只能放在子类构造函数的第一句。
因为子类继承了父类的属性与方法,要想初始化子类的对象,首先便需要父类的属性和方法,所以需要先调用父类的属性和方法,然后再在构造自己在父类基础上增加的属性和方法。
2.
真相是神马?
ExplorationJDKSource.Java
public class ExplorationJDKSource {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(new A());
}
}
class A{}
会发现输出的是object类,然而object类转换成字符串时会变成 类名@地址 的格式。
3.
在子类中,要调用父类中被覆盖的方法,可以使用super关键字。
package Test;
public class TestOverWrite {
public static void main(String args[])
{
B b=new B();
b.bFunction();
b.bFunction2();
}
}
class A
{
public void aFunction()
{
System.out.println("A!");
}
}
class B extends A
{
public void bFunction()
{
System.out.println("B!");
}
public void bFunction2()
{
super.aFunction();
}
}
运行结果如下:
B!
A!
4.
结果是第二句和第四句会出错。说明了父类可以向子类类型转换,而不同的子类直接不能类型转换。
标签:System,动脑,多态,public,动手,println,Grandparent,class,out 来源: https://www.cnblogs.com/wind-and-sky/p/11784632.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。