li

XXXXX

 

java--继承

1、继承

继承通常做三件事情:

  • 从父类得到成员;
  • 增加新成员;
  • 修改继承的方法成员。

1.1 继承的格式:

  • 通过extends关键字实现继承;
  • 子类可以通过继承获取父类的属性和方法,也可以定义自己独有的属性和方法;
  • 继承单一性:一个子类只能有一个父类,但一个父类可以有多个子类。
public class SubClass extends SuperClass{ 
    public static void main(String[] args) { 
        new SubClass().SuperInfo();//子类对象调用了子类中继承的SuperInfo方法。 
    } 
}
//父类 
class SuperClass { 
    String name; 
    int age; 
    public void SuperInfo() { 
        System.out.println("SuperInfo...."); 
    } 
}

1.2 继承中的构造方法

  • 子类的构造方法必须通过super关键字调用父类的构造方法,目的是:初始化父类的成员变量。
public class SubClass extends SuperClass{ 
    public SubClass() { 
        super("zhang3",16); 
    }
    public static void main(String[] args) { 
        //new SubClass().SuperInfo(); 
        SubClass sb = new SubClass(); 
        System.out.println(sb.name);//zhang3 
    } 
}
class SuperClass { 
    String name; 
    int age; 
    public SuperClass(String name,int age) {

        this.name = name; 
        this.age = age; 
    }
    public void SuperInfo() {
        System.out.println("SuperInfo...."); 
    } 
}
  • 调用子类的构造方法时,如果没有使用super关键字,则程序会先执行父类的无参构造方法,再执行子类的构造方法,如果父类没有无参构造方法,则会编译错误。

 

 1.3 父类的引用指向子类对象

  • 当父类的引用可以指向子类的对象,也叫做子类对象向上造型父类类型。
  • 当父类的引用指向子类对象时,父类的引用只能访问父类的属性和方法。
public class Person extends PersonFather{
    String name2; 
    public void personTest() { 
        System.out.println("person...."); 
    }
    public static void main(String[] args) { 
        PersonFather pf1 = new PersonFather();//父类对象 
        Person p = new Person();//实例化子类对象 
        PersonFather pf2 = new Person();
        System.out.println(pf2.name); 
        //System.out.println(pf2.name2);只能访问父类中定义的属性和方法 
    } 
}
class PersonFather{ 
    String name; 
    public void test(){ 
        System.out.println("Father..."); 
    } 
}

2、重写

2.1 方法的重写

  • 子类可以重写父类中定义的方法,即方法名和参数列表与父类方法相同,但方法体不同;
  • 当子类对象重写的方法被调用时,无论引用是父类还是子类都执行重写后的方法。
Son s = new Son(); 
s.sum();//z 
Father f = new Father(); 
f.sum();//f 
Father f1 = new Son(); 
f1.sum();// z

2.2 重写时的super

  • 子类在重写父类的方法时,可以使用super关键字调用父类的方法。
@Override 
public void area() { 
    super.area();//通过super关键字可以调用父类的area方法
    System.out.println(3.14*4*4); 
}

2.3 重载和重写的区别

重载:

  • 发生在编译期间;
  • 方法名相同,但参数列表不同;
  • 调用时根据方法名去判断

重写:

  • 发生在运行时期;
  • 前提是:存在继承关系,子类重写的方法与父类完全一致;
  • 调用时根据引用指向的对象类型去判断。

2.4 实例化子类对象的过程:

将父类加载到内存(给父类静态数据成员分配空间,调用父类静态代码块),将类加载到内存(给子类静态数据成员分配空间,调用子类静态代码块),给父类的成员变量分配空间,调用父类的代码块,调用父类构造方法;给子类的成员变量分配空间,调用子类的代码块,调用子类的构造方法。

 

posted on 2022-03-23 19:30  LXXXXxZz  阅读(55)  评论(0编辑  收藏  举报

导航