package com.zhy;
/**
* 面向对象的设计特点之:
* 继承---
* 在可以使用现有类的功能下,不需重新编写原有类的情况下,对这些功能进行拓展。
* 好处---
* 1 提高了代码的复用性
* 2 让类与类之间产生了关系,有了这个关系,才有了多态的特性
*
*Java只支持单继承,不支持多继承
*因为多继承容易带来安全隐患: 当多个父类中定义相同的功能时,
* 子类就不知道到底是去实现哪个父类的方法。
*但java保留这种机制, 并用两一种像是来完成表示--接口实现
*
*java支持多层继承,也是一种继承体系
*使用:
*想要使用一个继承体系中的功能,先查询体系父类的描述,
*因为父类中定义的是该体系中共性功能.通过了解共性功能就可以知道该体系的基本功能,
*这就可以基本使用了.----》当我们在具体调用时,要创建子类对象,因为:
*1: 父类可能不能创建对象 2:创建子类对象可以使用更多的功能包括父类基本功能和子类特有功能
*
*/
class persion1{
String name="persion";
persion1(){}
persion1(int x){
}
void show(){
System.out.println("父类方法输出:"+name);
}
}
/**
* 1变量:
* 如果子类中出现非私有的同名变量时,只要要访问本类中的变量,要用this
* 子类要访问父类中的同名变量要用super
* super用法与this用法一致
* 前者代表父类对象引用,后者为子类对象引用
* 2子父类中的方法:
* 重写(覆盖)--方法的一种特性
* 当子类函数出现和父类一模一样的方法时,
* 当子类对象调用该方法时,会运行子类方法的内容,则需要重写
* 注意:
* 1子类覆盖父类,必须保证子类权限>=父类权限,才能覆盖,否则编译失败
* 2静态只能覆盖静态
* 重载: 方法名称相同但参数不同
*
* 3子父类中的构造函数:不能覆盖
* 在对子类对象进行初始化时,父类的构造函数也会运行
* 因为在子类中构造函数中默认第一行有一条隐士的语句super()
* super()会访问父类中空参数的构造函数,
* 子类中所有的构造函数默认第一行都是super()
*
*思考:为什么子类一定要访问父类中的构造函数
*-- 1因为父类中的数据子类可以直接获取,所以子类对象在建立时,
*需要先查看父类是如何进行这些数据初始化的.所以要访问父类构造函数
* 2如果要访问父类中指定的构造函数,可以通过手动定义super()语句的方式来指定
* 注意: super()一定要定义在子类构造函数的第一行
*/
class students extends persion1{
int name;
students(int x){
super(10);
System.out.println("super(10)-----");
}
void show(){
System.out.println("子类:"+name);
System.out.println(super.name);
}
}
/**
* final : 最终修饰符
* 1 可以修饰类,方法,变量
* 2 被final 修饰的类不可以被继承
* 3 被final 修饰的方法不能被重写
* 4 被final 修饰的变量是一个常量,只能赋值一次.
* 作为常量书写规范所有字母均大写
*/
final class finalDemo{
final String string="final 字段";
final void show(){}
}
/**
* @author zhystiven
*/
public class ExdensTest {
static String string;
public static void main(String[] args) {
students students =new students(1);
students.show();
}
}