
Parentjava
public class Parent {public Parent() {
Systemoutprintln("父类无参构造");
}
public Parent(String str) {
Systemoutprintln("父类带参构造str= " + str);
}
}
Childjava
public class Child extends Parent {public Child() {
Systemoutprintln("子类无参构造");
}
public Child(String str) {
Systemoutprintln("子类带参构造str= " + str);
}
}
Testjava
public class Test {public static void main(String[] args)
{
Systemoutprintln("\nnew父类无参构造:");
new Parent();
Systemoutprintln("\nnew子类无参构造:");
new Child();
Systemoutprintln("\nnew父类带参构造:");
new Parent("im parent");
Systemoutprintln("\nnew子类带参构造:");
new Child("im son");
Systemoutprintln("\n");
}
}
打印结果:
new父类无参构造:
父类无参构造
new子类无参构造:
父类无参构造
子类无参构造
new父类带参构造:
父类带参构造str= im parent
new子类带参构造:
父类无参构造
子类带参构造str= im son
请按任意键继续
一个java文件只能有一个public的类
至于你说的那个 这个要看具体的要求 你写的东西是什么
如果你确定你写的这个类 不需要被其他人(写的程序)使用的话就算不是public的也可以
public class SuperTest {
public static void main(String[] args) {
Parent c = new Parent();
caddAll();
}
}
class Parent{
public void add(){
Systemoutprintln("A add");
}
public void addAll(){
Systemoutprintln("A add ALL");
add();
//在父子类之间,如果在父类中使用this关键字,那么运行子类时如果走到this行,指的是子类而不是父类。
//谁调用,this就是指谁
Systemoutprintln(thisgetClass());
}
}
class Child extends Parent{
@Override
public void add() {
// TODO Auto-generated method stub
Systemoutprintln("B add");
superadd();
}
@Override
public void addAll() {
// TODO Auto-generated method stub
Systemoutprintln("B add ALL");
superaddAll();
}
}
最后输出的结果是
B add ALL
A add ALL
B add
A add
按我的理解,superaddAll()方法调用来Parent中的addAll(),而Parent中的addAll()调用了add()。这里的add最后调用的是Child的add(),既然是superaddAll(),为何最后竟然调用的是子类的add()方法。。。
这里涉及到的问题是当子类调用super走到父类的方法中,这时的对象this到底是指Child子类还是父类Parent?
正确答案是子类,thisadd();其中的this是指当前对象,也就是Child c = new Child();中的c
因此虽然是在父类中执行的add方法,但实际上执行的是子类的add方法
在父类的add 方法中
Systemoutprintln(thisgetClass());
结果是Child而不是Parent!
子类和父类之间的命名应该没多大关系吧,只要符合java标示符命名规则就可以了!在java中,我们建议对于类名来说,若有一个单词构成则第一个字母大写,若有若干个字母构成则每个字母的首字母大写,对于方法的命名,若是一个单词构成则首字母小写,若有若干单词构成则除首单词之外其余单词首字母用大写,这也是大家习惯的写法,不按该方法也对!
abstruct class Addition { protected int num1; protected int num2; public Addition( int a, int b ) { num1 = a; num2 = b; } public abstruct object add(); } class NumberAddition : Addition { public NumberAddition( int a, int b ) : base( a, b ) { } public object add() { return (object)( num1 + num2 ); } } class TextConcatenation : Addition { public TextConcatenation( int a, int b ) : base( a, b ) { } public object add() { return (object)( (string)num1 + (string)num2 ); } }
以上就是关于编写程序显示父类、子类构造函数的调用过程,在子类中实现构造函数的继承。全部的内容,包括:编写程序显示父类、子类构造函数的调用过程,在子类中实现构造函数的继承。、一个程序中分别是父类和子类。编译后将生成几个类文件(*.class)、子类怎样调用父类方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)