黑马程序员技术交流社区

标题: 关于继承的问题,有点绕晕了 [打印本页]

作者: 温晓慧    时间: 2015-1-23 19:50
标题: 关于继承的问题,有点绕晕了
具体是class A extends class B,A类中有个dec方法可以打印属性
  1. A a =new A("aa","bb",12);
  2. B b =new B("cc","dd",33);
  3. a.dec();
  4. b.dec();
复制代码

出现的结果就是
aabb12
aabb12


为啥a.dec();也打印的是b传的值啊?
不知道能不能,看懂,先这么写。不行上全部代码

子类调用父类的构造函数,
父类对象中的属性也会跟着都变化么?

作者: 弓长土皮    时间: 2015-1-23 21:22
:handshake
作者: qq306149769    时间: 2015-1-23 21:28
父类的构造函数会变化,因为,new对象的时候,会访问本类的构造函数,但是,构造函数上,会有一条默认的语句,叫super(),就是默认访问父类的构造方法!
作者: fanshuai    时间: 2015-1-24 10:37
把代码都弄上。
作者: jwl245322883    时间: 2015-1-24 11:04
感觉3楼的说法是对的
作者: 王者之风西昆仑    时间: 2015-1-24 11:53
比较难懂
作者: 王者之风西昆仑    时间: 2015-1-24 12:13
能否把全部代码贴出来
作者: Novice.Jin    时间: 2015-1-24 12:55
估计和静态有关系吧,把整个代码发上来啊
作者: enjoy    时间: 2015-1-24 13:28
继承有点绕
作者: 小棽    时间: 2015-1-24 13:34
把完整的代码贴出来吧
作者: 王者之风西昆仑    时间: 2015-1-24 13:39
  1. class B
  2. {
  3.                
  4.         String X;
  5.         String Y;
  6.         int Z;
  7.        
  8.         B(String x,String y,int z)
  9.         {
  10.                 this.X = x;
  11.             this.Y = y;
  12.             this.Z = z;               
  13.         }
  14.        
  15.         public void dec()
  16.         {
  17.         System.out.println(X+Y+Z);       
  18.         }
  19.        
  20. }

  21. class A extends B
  22. {
  23.        
  24.         A(String x,String y,int z)
  25.         {
  26.                 super(x,y,z);
  27.         }
  28.         public void dec()
  29.         {
  30.         System.out.println(X+Y+Z);       
  31.         }
  32. }

  33. class C
  34. {
  35.         public static void main(String[] args)
  36.         {
  37.                 A a =new A("aa","bb",12);
  38.                 B b =new B("cc","dd",33);
  39.                 a.dec();
  40.                 b.dec();
  41.         }
  42. }
复制代码


不知道你的代码是不是这样的,我运行是正常的
http://bbs.itheima.com/forum.php?mod=attachment&aid=NjM0NTh8ZTA4ZGMyNmE0MWZkY2U5N2YxNTBmYzljYzUyMmFjN2Z8MTczMTExNTUzNw%3D%3D&request=yes&_f=.png

QQ图片20150124133459.png (833 Bytes, 下载次数: 191)

QQ图片20150124133459.png

作者: 董晗    时间: 2015-1-24 14:27
你这写的有错啊,A继承B,A中有个dec方法,那你创建B对象,b.dec();会报错
作者: gzy    时间: 2015-1-24 15:30
1111111111111
作者: 温晓慧    时间: 2015-1-24 22:37
不好意思,各位大神,小弟今天出去干活了,这么多大神帮忙解答
作者: 温晓慧    时间: 2015-1-24 22:42
package otherExam2;
/*
*  假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:姓名、工号以及工资。
*      经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。
*      请使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。
* */
public class Exam1 {
        public static void main(String[] args) {
                Person p = new Person("李四","12345",1223.22d);
                p.dec();
                Maner m = new Maner("张经理","99999",201333.11d);
                p.dec();
                m.setBonus(1234.22d);
                m.dec();
                m.aec();
                System.out.println(m.getBonus());
        }

}
class Person
{
        public static String name;
        public static String ID;
        public static double money;
        public Person(String name,String ID,double money)
        {
                this.name =name;
                this.ID= ID;
                this.money=money;
        }
       

        public static void dec()
        {
                System.out.println("正常工资为"+name+","+ID+","+money);
        }
}
class Maner extends Person
{

        public Maner(String name, String ID, double money) {
                super(name, ID, money);
                // TODO Auto-generated constructor stub
                this.getBonus();
        }
       
        private  double bonus;
        public  double getBonus() {
                return bonus;
        }
        public void setBonus(double bonus) {
                this.bonus = bonus;
        }
        public static void aec()
        {
                System.out.println("奖金为:");
        }
}



作者: 温晓慧    时间: 2015-1-24 22:51
不好意思,电脑问题,不能在代码里编辑,只能直接发了。。。。抱歉
作者: IcedCoffee    时间: 2015-1-24 23:49
Person p = new Person("李四","12345",1223.22d);
p.dec();
Maner m = new Maner("张经理","99999",201333.11d);
p.dec();
在这里你注意下 你的对象全是P 如果你下面的对象是m结果值就会改变了 这里和继承的关系不大
p是父类创建的引用对象 而m是子类创建的引用的对象 你下面还用p引用函数 他引用的地址值是上面
new Person的 而不是子类对象创建的Maner m

作者: IcedCoffee    时间: 2015-1-24 23:52
最后那个Manner m 写的有点会让你误解 那个m就是创建的对象 他引用的是new Manner 在堆中新开辟的地址值 你用p调用的是 new Person在堆中开辟的地址值 其实你是调用了2次相同的地址值 所以一样




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2