//
class StudentClass{
String name;
int age;
void study(){
System.out.println(name+"..student study "+age);
}
}
class Worker {
String name;
int age;
void work(){
System.out.println("worker work");
}
}
//继承 子类 继承 父类
/*
* 继承的好处:
* 1.提高代码的复用性
* 2.让类与类之间的产生了关系,给第三个特征多态提供了前提
*
* java中支持单继承,不直接支持多继承,但对c++中的多继承机制进行改良。
* 单继承:
* 一个子类只能有一个直接父类。
* 多继承:
* 一个子类可以有多个直接父类。(java中不允许,进行改良)
*不直接支持,因为多个父类中有相同的成员,会产生调用的不确定性。
*
*
*java支持多层(多重)继承:就会出现继承体系,当要使用一个继承体系时 1.查看该体系中的顶 层类,了解该体系的基本功能
*2.创建体系中的最子类对象,完成功能的使用
*在java中是通过“多实现的方式来体现的”
*
*C继承B,B继承A
*什么时候定义继承呢?
*
*当类与类之间存在着所属关系的时候,就进行继承。xxx是yyy中的一种。xxx extends yyy
* */
public class Student extends Person{
public static void main(String[] args){
}
}
class A{
void show(){
System.out.println("a");
}
}
class B{
void show(){
System.out.println("b");
}
}
//class C extends A,B{
//
//}
/*
*继承:
*成员变量的
*当本类的成员和局部变量同名用this区分
*在父类中的成员用super区分
*
*this和super的用法相似:
*this:代表一个本类对象的引用
*super:代表一个父类的空间
*
*
*
* 成员函数:在子父中的特点
* 当子父类中出现成员函数一抹一样的情况,会运行子类的函数
* 这种现象称为覆盖操作。这是函数在子父类中的特性。
*
* 函数两个特性:
* 1.重载。同一个类中
* 2.覆盖。在子类中,这种覆盖也成为重写或者复写。。重写
*
* 覆盖的注意事项:
* 1.子类方法覆盖父类方法时,子类权限必须要大于等于父类
* 2.静态只能覆盖静态或被静态覆盖。
*
* 什么时候使用覆盖操作?
* 当对一个类进行 子类的扩展时 子类需要 保留父类原有功能声明,但是要定义增加子类特有内容
* 就是用覆盖操作完成
super.show();
* 使用super调用父类方法,这样就可以覆盖和重写子类而方法了
子父类中的构造函数的特点:
* 1.在子类构造对象时,发现访问子类构造函数时,父类也运行了???
* 因为在子类的构造函数中,第一行有一个默认的隐式语句
* super()
*
* 调用的就是父类中的空参数的构造函数。
* 子类的实例化过程:
* 子类中所有的构造函数,默认都会访问父类中的空参数的构造函数。这 句是默认存在的。
*
* 为什么子类实例化的时候,要访问父类中的构造函数呢?
* 那是因为子类继承了父类,获取到了父类中的内容(属性),所以在使 用父类内容之前要先看父类是如何对自己的内容进行初始化的
* 所以子类在构造函数时,必须访问父类中的构造函数。
*
* 为什么完成这个必须的动作,就在子类的构造函数中加入super()语句。
*
* 如果父类中没有定义空参数的构造函数,那么子类的构造函数必须用 super明确调用父类中的那个构造函数
* 同时子类的构造函数中,如果使用了this调用了本来的构造函数时,super就没有了,因为super和this
* 都只能定义在第一行,所以只能有一个,但是可以保证的是子类中肯定会有其他的构造函数访问父类的构造函数
*
*
*
* 注意:super语句必须要定义在子类构造函数的第一样,因为父类的初始化动作要先完成。
* 通过super初始化父类内容时,子类的成员变量并未显示初始化,等super()父类初始化完毕后才进行子类的成员变量显示初始化
*
* 一个对象的实例化过程:
* Person p = new Person();
* 1.JVM会读取指定的路径下的Person.class文件,并加载进内存,并会先加载person的父类(如果有直接父类的情况下)
* 2.在堆内存中的开辟空间,分配地址
* 3,并在对象空间中,对对象中的属性进行默认初始化
* 4,调用对应的构造函数进行初始化
* 5。在构造函数中,第一行会先调用父类中构造函数进行初始化
* 6,父类初始化完毕后,在对子类的属性进行显示初始化
* 7,在进行子类构造函数的特定初始化
* 8,初始化完毕,将地址复制给引用变量
* */
网友评论