华恩JAVA班第23天
继承知识点汇总:
继承的概述: 1.提高了代码复用性,简化了代码 2.让类与类之间产生了继承关系,才有了后面的多态性的存在 注意:千万不要为了获取其他类的功能简化代码,而建立继承关系 必须要类与类之间存在继承关系,继承关系:is a class Person{ String name; int age; }
class Student extends Person{ void study(){ System.out.println("学习"); } }
class Teacher extends{ void teath(){ System.out.println("教书"); } }
public class Test{ public static void main(String[] args){ } }
继承的概述: 子类拥有父类的成员,子类不能拥有父类中被private修饰后的成员
java多层继承 在多层继承中最下层的子类拥有整个继承体系的成员, 最上层的父类里面定义所有子类的共性描述
java中不支持多继承。因为多继承存在安全隐患,当多个父类定义了 相同的成员,子类对象不确定运行那一个。 但Java保留了这种机制,并用了另一种方式来体现, 多实现
class A{ String name; void show(){} } class B{ int age; void show(){} } class C extends A,B{
}
public class Test1{ public static void main(String[] args){ C c = new C(); c.show(); } }
子父类成员特点 成员: 1.成员变量 2.函数 3.构造函数
变量: this 代表当前对象的引用 this.变量 首先在本类中找所需要的这个变量, 如果没有找到再去父类中找。 super 用于访问当前对象的父类成员,super.变量 直接在父类中找所需变量
class Person{ String name = "李四"; }
class Student extends Person{ String name = "张三"; void show(){ System.out.println(this.name); //输出张三 System.out.println(super.name); //输出李四 } }
public class Test2{ public static void main(String[] args){ Student stu = newStudent(); stu.show(); } }
当子类中出现和父类中一样的函数时,当子类对象调用该函数, 运行的是子类中的函数,这种情况就是函数的另一种特性:重写(覆盖)
class Animal{ String type; public void run(){ System.out.println("跑步中"); } }
class Cat extends Animal{
}
class Dog extends Animal{ public void run(){ String type = "大黄狗"; System.out.println(type+"哼着歌跑步中"); } }
public class Test4{ public static void main(String[] args){ Cat cat = new Cat(); cat.run(); Dog dog = new Dog(); dog.run(); } }
有了子父类之后构造函数的特点: 在对子类对象进行初始化的时候, 父类的构造方法也会运行,那是因为子类的构造函数默认第一行 有一条隐式的语句super();
子类每个构造方法第一行都有一个隐式的 super();
class Fu{ String name; Fu(){ System.out.println("父类构造方法"); } Fu(String n){ this.name = n; System.out.println("父类有参构造方法"); } }
class Zi extends Fu{ Zi(){ System.out.println("子类构造方法"); } Zi(String n){ super("小红"); this.name = n; System.out.println(n+"子类有参构造方法"); } }
public class Test6{ public static void main(String[] args){ Zi z = new Zi(); Zi z1 = new Zi("小李"); } }
class Student{ String name; int age; String degree;
Student(String name,int age,Stringdegree){ this.name = name; this.age = age; this.degree = degree; } }
class Undergraduate extends Student{ String specialty; Undergraduate(String name,int age,Stringdegree,String specialty){ super(name,age,degree); this.specialty =specialty; } void show(){ System.out.println(name+"\n"+age+"\n"+degree+"\n"+specialty); } } class Graduate extends Student{ String direction; Graduate(String name,int age,String degree,Stringdirection){ super(name,age,degree); this.direction =direction; } void show(){ System.out.println("\n"+name+"\n"+age+"\n"+degree+"\n"+direction); } }
public class Test7{ public static void main(String[] args){ Undergraduate one = newUndergraduate("ziuginzeon",21,"本科","计算机科学与技术"); one.show(); Graduate two = newGraduate("ziuginzeon",21,"本科","JAVA"); two.show(); } }
