Win7系统 桌面我的文档不见了怎么就不见了

java如何实现父类调用子类成员变量?
比如我有一个抽象父类
abstract class Parent{
&&&&Parent(){
&&&&& & operFunc();
&&&&abstract func();
&&&&operFunc(){
&&&&&&&&return 1+func();
class Son extends Parent{
&&&&private int a;
& & Son(int a){
&&&&& & this.a=a;&&&&
& & public int func(){
& & public static void main(){
&&&&& & System.out.println(new Son(1));
& & //这里输出为什么是1,而不是2?怎么改也变不成2啊
public class Son extends Parent {
Son(int a) {
public int func() {
public int ret() {
return super.operFunc();
public static void main(String[] args) {
System.out.println(new Son(1).ret());
// 这里输出为什么是1,而不是2?怎么改也变不成2啊
abstract class Parent {
Parent() {
operFunc();
abstract int func();
int operFunc() {
return 1 + func();
--- 共有 1 条评论 ---
子类的ret()还不是调用父类的openFunc();
和你的标题不符合啊
因为你父类里面是抽象方法,不能覆盖。是1很正常。你可以再子类将其实现。或者你父类不用抽象类。
目测 楼主在意淫, 不是java的语法, 编译不会通过的,也不可能输出..
你输出的是一个对象, 不会是1 或者2
就算你写的是伪码,按照你的意思理解 & 虽说new son的时候 先new老爸出来,但是new出来的这个老爸 并没有返回给son 就这样。。
--- 共有 3 条评论 ---
对象也有toString的嘛,也是可以输出的
同志我的代码没问题呀输出也不是一个对象啊
无法直接获得,需要通过子类覆写父类的 getXXX() 方法,然后在父类中调用该方法获得。
先父,再子,楼主要逆天吗?
在构造函数调用一个1+1,不知道你要干什么。给CPU点压力?你应该
while(true){
--- 共有 1 条评论 ---
我只是在这里展示一下问题,不是我要取得1+1,因为我在设计一个抽象类时,它产生的子类需要参数,并且,该参数要传回父类进行操作的。也就是我的父类有了比较完善的处理功能,但是我让子类只处理自己的对应的方程运算
父类放一个一个protected XXX createXXX()方法就是了,java源码里一堆这么干的。
在子类继承父类时,子类的构造方法中,默认是先调用父类的构造方法,所以你在父类中调用operFunc来改变son中a的值,而此时son中的a还没有被赋值,必然是得不到你想要的结果的。
如果想要用operFunc来操作son中的a,可以直接调用来得到结果,比如:
Son son = new Son(1);
System.out.println(son.operFunc()); 这样的结果就是2了。
总之,注意执行顺序就好了。。。
--- 共有 3 条评论 ---
: 你在哪看到我说在父类构造调用子类的值了?只是告诉他的想法不对。
哇,父类构造调用子类的值?你怎么想到的?你怎么去告诉父类,子类有A这个值?
你的父类方法都没返回值,我想问下你是怎么编译通过的?
--- 共有 5 条评论 ---
你自己看看 你下面刚发的代码 和上面帖子内容的代码一样吗?
你在证明我胡说吗?
: 你拿我下面的代码到编译器里去试试。绝对没问题,但是我得承认我的一个错误,那就是打印的的确是对象,因为构造方法里不能使用return
: 这个不是引用类型的变量,不会报空指针的,他要是不赋值值的话,默认为0
返回值为0,这不是java最基本的么
我上面就说过了,
引用来自“goover1001”的答案你的父类方法都没返回值,我想问下你是怎么编译通过的?abstract class Parent{
& & Parent(){
& & & & operFunc();
& & abstract int func();
& & public int operFunc(){
& & & & return 1+func();
public class Son extends Parent{
& & Son(int a){
& & & & this.a=a; & &
& & public int func(){
& & public static void main(String [] args){
& & & & System.out.println(new Son(1));
& & //这里输出为什么是1,而不是2?怎么改也变不成2啊&&父类和子类转换浅谈篇(将子类对象赋值给父类对象)_Java_领测软件测试网
&&父类和子类转换浅谈篇(将子类对象赋值给父类对象)
发表于:来源:作者:点击数:
父类和子类转换浅谈篇(将子类对象赋值给父类对象) 最近对将子类对象赋值给父类对象有点心得,想和大家分享一下.但本人水平有限,请各位指正和批评. 言归正传,下面是几个小例子,请大家看一看. 测试一 父类: public class Supclass { public void print() { jav
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&父类和子类转换浅谈篇(将子类对象赋值给父类对象)&&最近对将子类对象赋值给父类对象有点心得,想和大家分享一下.但本人水平有限,请各位指正和批评.言归正传,下面是几个小例子,请大家看一看.&一&&父类:public&class&Supclass&
&&&&public&void&print()
&&&&&&&System.out.println("this&is&父类print()方法"+"——此时对象"+this.toString());
子类:public&class&Subclass&extends&Supclass&
&&&&public&static&void&main([]&args)&
&&&&&&&Supclass&sup=new&Subclass();
&&&&&&&sup.print();
&&&&&&&.out.println("此时对象"+sup.toString());
&&结果:this&is&父类print()方法——此时对象是Subclass@126b249&&&&&&&&此时对象是Subclass@126b249&&说明:&&&&Supclass&sup=new&Subclass();&&&虽然声明的对象是父类对象,但实际的内存空间是子类对象的。&&&继承父类的方法public&void&print()被调用,输出的是子类对象名字解析。结论:编译时声明的对象是父类对象,但运行时却是子类对象.子类没有重写父类的方法,则此&&时的对象调用继承父类的方法。测试二&&父类:public&class&Supclass&
&&&&public&void&print()
&&&&&&&.out.println("this&is&父类print()方法"+"——此时对象"+this.toString());
&&子类:public&class&Subclass&extends&Supclass&
&&&&&&&&public&void&print()
&&&&&&&.out.println("this&is&子类print()方法"+"——此时对象"+this.toString());
&&&&public&static&void&main([]&args)&
&&&&&&&Supclass&sup=new&Subclass();
&&&&&&&sup.print();
&&&&&&&.out.println("此时对象"+sup.toString());
&&&结果:this&is&子类print()方法——此时对象是Subclass@126b249&&&&&&&&&此时对象是Subclass@126b249&&&说明:&&&我在上个例子的基础上,重写了父类的print()方法,此时的调用的是子类的print()方法。结论:在上个例子结论的基础上,我得到了一个结论:此时对象运行时确实子类对象,如果子类没有从写父类的方法,&&&&&&则此时的对象调用继承父类的方法;否则,此时的对象调用子类方法.问题:&我们是不是可以从上面的测试得到的这样结论:&将子类对象赋值给父类对象(即Supclass&sup=new&Subclass()),&&&&&&&我们得到的就是子类对象,即sup就是子类对象??????测试三&&父类:&public&class&Supclass&
&&&&&&&&protected&&className="父类属性";
&&&&public&void&print()
&&&&&&&.out.println("this&is&父类print()方法"+"——此时对象"+this.toString());
&&子类:public&class&Subclass&extends&Supclass&
&&&&&&&&protected&&className="子类属性";
&&&&&&&&public&void&print()
&&&&&&&.out.println("this&is&子类print()方法"+"——此时对象"+this.toString());
&&&&public&static&void&main([]&args)&
&&&&&&&Supclass&sup=new&Subclass();
&&&&&&&.out.println("此时的属性时:"+sup.className);
&&结果:此时的属性时:父类属性&&说明:我在第一个测试的基础上,给父类添了一个属性className,在子类重写了这个属性.&&&&&&&&但我输出此时对象的属性时,却是父类的属性.&&结论:&将子类对象赋值给父类对象,方法和属性和我们正统的继承关系很不一样.&&问题:&&&&&&&此时对象究竟是子类对象,还是父类对象?&&开始推测:&&&&&&&&我在推测之前有几点须声明:&&&&&&1.当我们new一个子类对象时,父类对象的构造函数同时也被执行,即父类的一些必要信息和子类对象共占一个内存空间,&&&&&&&&当我们方法重写时,于是我们就能使用super这个指代父类的对象.&&&&&&2.java中对象并不是完全的思想做的,即不是把一个对象的属性和方法同时封装到对象中.&&&&&&&&而是对象有自己的属性,方法却是引用类中的方法,可以说它是把属性和类中方法的引用封装到对象中.&&&&&&&&于是对象调用的方法不是自己的方法,而是类中方法.至于java为什么要这样做,我就不知道了.&&&&&&3.当对象被加载到内存时,类先被加载到内存中,此后类应是一只留在内存中.至于类什么时候从内存中消失,我也不知道.&&&&&&&&&我想java一定有自己的回收机制,就像回收对象一样.&&&&&&4.编译和与运行是完全不同的事.编译时主要做的是声明对象的类型,分配属性,检查语法错误等&&&&&&&&运行时做的是,将对象加载内存(一般用new,反射也常用),&运行代码执行功能等.&&&&&&&&&&&&5.若是读者您和我在这几点没有产生共鸣的话,或者说我们在这几点没用相同的认识的话,你会觉得我在胡说.&&&&&&&&也许你会觉得我的专家分太低,就觉得我的可信程度就低.但我想说的是学不分先后,达者为先.&&&&&&&&呵呵,我已准备好将我的专家分变为负值了,不胡扯了,我们继续.&&&&&推测:&&&&&&&1.当我们编译Supclass&sup=new&Subclass()时,sup对象被声明为Supclass类,于是sup对象的属性便是父类对象的属性的值,&&&&&&&&&它是编译时被确定好的.(声明4,可以对这段进行解释).这段话可以对测试三进行解释,即为什么此时对象的属性是父类对象的属性.&&&&&&&&&2.当我们运行Supclass&sup=new&Subclass()时,此时sup对象的内存空间是子类对象的内存空间(声明4,可以对这段进行解释),&&&&&&&&&注意此时sup对象的内存空间由两部分组成父类的一些必要信息和子类对象信息(声明1,可以对这段进行解释).&&&&&&&&&当我们不重写父类的方法时,由于此时内存空间已有父类的一些必要信息,所以继承父类的方法public&void&print()当然能被调用。&&&&&&&&&这段话可以对测试一进行解释.&&&&&&&3.接着2继续,若我们重写父类的方法时,由于sup对象的内存空间是子类对象的内存空间,子类的方法public&void&print()已被加载到内存中.&&&&&&&&&所以我们调用的是子类的方法public&void&print();如果你需要调用父类的被重写方法,需要用super.&&&&&&&&&这段话可以对测试二进行解释.&&&&&总结:&&&&&&&&&以下纯是个人观点:&&&&&&&&&&将子类对象赋值给父类对象,所得到对象是这样的一个对象:&&&&&&&&&它是一个编译是为父类对象,但运行却是一个子类对象,具体特征如下.&&&&&&&&&1.被声明为父类对象&&&&&&&&&2.拥有父类属性&&&&&&&&&3.占用子类的内存空间&&&&&&&&&4.子类方法覆盖父类的方法时,此时对象调用的是子类的方法;否则,自动调用继承父类的方法.&&&&&&&&&5.我人认为这个对象既不是父类对象,也不是子类对象.当我们用到它的方法时,&&&&&&&&&&&我便把它看成子类对象;若用到它的属性时,我把它看成父类对象.&&&&&&&&&&&它是一个占用父类属性,而使用子类方法的对象.至于到底是什么对象,我认为还是得根据声明来,它应算是父类对象,但拥有子类方法.&&&&&&&&&&&想一想:&&&&&&&&&&在测试三的基础上,我们如何取出子类的属性?????&&&&&&&&&&&建议:&&&&&&&&&我可能由于自身的局限,不能深刻或不正确的表达了我的观点,希望大家多指教。&&&&&&&&&我建议大家看完一遍以后,先不要表示反对或赞同.如果你认为我胡说,你可以回帖子&&指正,甚至骂我。&&&&&&&&&原因:可能你我由于认识不同,你认为我说的不对,于是你投了反对票,但过了一些日子我们的认识相同了或更深刻了,你再想给我赞成投票,但你的投票机会已用完了,于是请您珍惜您的投票机会啊!!!&&&&&&&&&呵呵,跟大家开个玩笑!!!!!!&&&&&&&&&有错误尽情的指正.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
原文转自:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)异常的子类包括父类全有的属性和方法,为什么catch时候父类要放置子类的后面?
全部答案(共2个回答)
ch后面写的子异常就没有意义了
java中可以只执行父类不执行子类的
在java的线程Thread类中有三个方法,比较容易混淆,在这里解释一下
(1)interrupt:置线程的中断状态
(2)isInterrupt:线程是否中断...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区2015年7月 Java大版内专家分月排行榜第二2015年4月 Java大版内专家分月排行榜第二
2015年3月 Java大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
最新添加资讯
24小时热门资讯
Copyright ©
All Rights Reserved. 学网 版权所有
京ICP备号-1 京公网安备02号

我要回帖

更多关于 win7我的文档图标不见 的文章

 

随机推荐