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 实例化子类对象的过程:
将父类加载到内存(给父类静态数据成员分配空间,调用父类静态代码块),将类加载到内存(给子类静态数据成员分配空间,调用子类静态代码块),给父类的成员变量分配空间,调用父类的代码块,调用父类构造方法;给子类的成员变量分配空间,调用子类的代码块,调用子类的构造方法。
本文来自博客园,作者:LXXXXxZz,转载请注明原文链接:https://www.cnblogs.com/l11111/p/16046337.html