JAVA基础(十一)继承
继承
自己理解
类与类单继承,
获得父类的功能,强大自己,只能单向继承,class子类extends父类;
重写:当子类需要父类的功能,当子类特有的功能与父类有元素或方法重名时,子类要继承父类的元素,就需要super.
父类中的成员变量或者方法名.在main中调用子类也会获得父类的元素或者方法
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
继承:
关键字 extends
定义:继承 就是让类与类之间产生关系-->父子关系
格式:class 类名1 extends 类名2{
}
类名1 继承于 类名2
类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。
继承的好处和弊端:
好处:
1.提高了代码的复用性
2.提高了代码的维护性
3.让类与类之间产生了关系 是多态的前提
弊端:
1.类的耦合性增强了
java中类的继承特点:
.java中类只支持单继承 不支持多继承
.java支持多层继承(继承体系)
.一个父类 可以有多个子类
注意事项:
1.不能因为部分共性的内容 而盲目继承
2.子类只能继承父类非私有的成员(成员变量 成员方法)
3.父类的构造方法 不能被子类继承 但是可以通过super()进行调用
4. 子类在继承父类的时候,会自动拥有父类的成员。
5.一个类只能继承一个父类
6.一个父类可以被多个子类继承。
多层继承:
在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类,
例如C类继承自B类,而B类又可以去继承A类,这时,C类也可称作A类的子类。下面这种情况是允许的。
class A{}
class B extends A{} // 类B继承类A,类B是类A的子类
class C extends B{} // 类C继承类B,类C是类B的子类,同时也是类A的子类
继承-子父类中成员变量的特点以及重写
在子类中,访问父类中的成员变量格式:
super.父类中的成员变量
super只能写在子类里面
main方法调子类,同时也能获得父类属性
建父类
public class Fu { int i=1; public void eat() { //重写 System.out.println("哈哈吃饭"); } }
键子类 关联父类
// 继承父类
public class Zi extends Fu{ //成员变量 int i=2; public void show () {
//局部变量 int i=3; // System.out.println(i);//结果为3 就近元素 结果为3 //System.out.println(this.i); //结果为2 this指本类,结果为2 //System.out.println(super.i)//结果为1 父类 //子父类中出现了同名的成员变量时 //在子类中需要访问父类中非私有成员变量时,需要使用super关键字 //访问父类中的i } //重写父类功能 public void eat() { super.eat();//获得父类的功能 System.out.println("xix"); } }
测试
//在继承中 /* 子类和父类出现重名成员变量时 如果子类有,调子类的; 如果子类没有,调父类的;*/ public class demo01 { public static void main(String[] args) { Zi z = new Zi();//创建子类对象 System.out.println(z.i);// 结果为2 就近原则 //重写 调子类方法 z.eat(); /*子类有eat方法 父类有eat方法 l 子父类中成员方法的特点 当在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法
,若子类中不存在就会执行父类中相应的方法。 l 成员方法特殊情况——覆盖 子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为override重写、复写或者覆盖。 为了能够同时获得子类父类的方法(功能),就需要子类继承父类的功能super.eat();//获得父类的功能 */ } }