华恩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();
}
}