黑马程序员技术交流社区
标题:
继承的问题
[打印本页]
作者:
Zhang_qian
时间:
2012-5-24 00:50
标题:
继承的问题
class A
{
A()
{
System.out.println("A");
}
}
class B extends A
{
B()
{
System.out.println("B");
}
}
class ExtendsDemno
{
public static void main(String[] args)
{
B b=new B();
A a=new A();
}
}打印结果是A B A ,对super关键字还有点迷惑,请高手指点一下如果是有参构造的话,创建子类对象的有参构造会怎么样呢?帮忙讲解一下谢谢!
作者:
谭威
时间:
2012-5-24 01:08
super关键字类似于this关键字,如果你对this关键字有所了解的话,相信这个super不难,应为this代表当前对象的引用,而super代表父类对象的引用。。
你上面这个例子中B继承了A,,那么他们的属性和普通方法,构造方法都可以被继承.即使没有super 也会先调用父类的构造函数 super关键字用来显示的调用子类的方法。。如果要在子类的构造方法中调用父类的构造方法,则需要在子类构造方法的第一句用super关键字调用,比如super(),调用父类无参的构造方法,super(参数列表),调用父类有参数的构造方法。必须写在子类构造函数的第一条,super还可以调用父类的普通方法super.method(),或supermethod(参数列表);
参考代码:
class Employee
{
private String name;
private int age;
private double salary=2000.0;
public void displayInfo(){
System.out.println("name:"+name+" ,age="+age);
}
public Employee(String name,int age,double salary){
this.name=name;
this.age=age;
this.salary=salary;
}
}
class Manager extends Employee
{
private double bonus;
private String position;
public Manager(String name,int age,double salary,String position){
super(name,age,salary);//调用父类构造函数
this.position=position;
super.displayInfo();
}
public void setBonus(double bonus){
this.bonus=bonus;
}
}
public class Demo
{
public static void main(String []args){
Manager m=new Manager("Tanwei",20,5000,"Java");
}
}
作者:
朝哥
时间:
2012-5-24 01:24
简单地说吧,子类继承父类的时候,在子类中有个默认的东西,它是super(),super()等同于父类中的构造方法B(){}。这个死记着的。所以~~~
作者:
曾_强
时间:
2012-5-24 01:33
This和Super关键字在本质上是相同的。 分享前辈的总结,请您参考:
this关键字
1)在类的内部代表对象本身,你应该看到过this.xxx(),this.xxx这种用法吧,
this就代表这个类的对象,比如
public class A {
private String name;
public void setName(String name) {
//this就代表A的一个对象
//当你实例一个A时,A a1 = new A();this就是那个a1,只是this在内部用,而a1在外部用
//A a2 = new A()同理,这时在a2的内部,this就代表a2
this.name = name;
}
}
2)this的第二种用法,是用在构造函数里的
当在构造器里要调用自己的其他构造器时,就用this
this必须放在第一行
public class A {
private String name;
public A() {
this("no name");
}
public A(String name) {
this.name = name;
//other codes
}
}
super关键字
1)显式的调用父类的方法
当从一个类继承时,子类和父类都有一个同名方法,也就是子类覆盖了父类的方法,可是又想调用父类的方法,那么就要用super,像继承swing的类时就有个好例子
public class MyPanel extends JPanel {
@Override
public void paint(Graphics g) {
super.paint(g);//如果不用super,那么就会调用自己的paint方法
}
}
2)用在构造器,和this的用法一样,super也可以用在构造器,this是调用自己的其他构造器,那么super当然就是调用父类的构造器了
作者:
许庭洲
时间:
2012-5-28 13:30
对于super关键字,当在调用父类的方法时,有有参和无参两种形式调用,调用父类无参的构造方法super(),调用父类有参数的构造方法采用super(参数列表)。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2