A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
继承:
1、提高代码的复用性
2、让类与类之间产生关系,有了这个关系,才有了多态的特性

注意:不能为获取其他类的功能,简化代码而继承,类与类之间必须有所属关系才可以基础。
java语言中:
1、只支持单继承,不支持多继承,
2、支持多层继承,
多继承会存在安全隐患:当多个父类定义相同的功能,但是功能的内容不一样,这样运行的时候
                                     不知道该运行谁,但是java保留了机制用另一种方式实现就是多实现。
如何使用继承体系的功能?
想要使用体系功能,先遍越父类的功能,因为父类定义的功能是体系的共性功能,通过父类,就
可以知道该体系的基本功能,这个体系就可以基本的使用了
在具体的调用的时候,为什么要创建子类对象?
1、父类有可能不能创建对象(如抽象类)
2、创建子类对象可以使用更多的功能,包括基础功能和特有功能
简而言之:查阅父类,创建子类的功能。

子父类出现后,类成员的特点:
1、变量
2、函数
3、构造函数

一、变量
如果子类中出现非私用的同名变量时
1、子类要访问本类的变量时,用this
2、子类要访问父类中的变量时,用super
3、this和super的使用几乎是一致(this代表是本类的引用,super是父类的引用)
二、函数
子父类中的函数

重写:当子类中出现父类一样的函数时,当调用父类的时候,会执行子类里面的函数
如同父类中的函数被覆盖,这种情况就是重写(覆盖)。

当子类沿袭父类的功能时,子类也具备该功能时而且还要定义新的功能时,我们直接
可以保留父类功能定义,利用重写定义新的功能

覆盖:
1、当子类覆盖父类时,子类的权限要大于等于父类的权限,才可以覆盖,否则编译失败
2、静态只能覆盖静态
注意:
重载:只看同名函数的参数列表(个数和类型不同时,重载)
重写:子父类的方法要一模一样
三、子父类构造函数
在对子类进行初始化时,父类的构造函数也会运行,
那是因为在子类的第一行有一条隐式函数super();
super();会访问父类中空的构造函数,而且所用的子类的构造函数都有默认的super();

为什么一定要访问父类中的构造函数?
当子类继承父类时,是要继承父类中的一些数据,所以当建立子类对象时,要先看父类怎么初始化数据的
所以子类初始化时一定要先初始化父类的构造函数。
如果访问父类中指定的构造函数时,需要手动super(参数)来定义。
super一定要写在第一行。


子类的实例化过程
结论:
子类的所有构造函数都会有默认访问父类空参数的函数,因为每一个都有一个隐式super语句,
当父类没有空参数的函数时,必须手动通过super语句形式来访问父类中的构造函数,
当然子类构造函数中第一行也可以用this来访问本文本类空参数的构造函数,
子类构造函数至少有一个会访问父类构造函数

*/

//父类中的父类是Object
class Father
{
        private int num=4;
        public void setNum(int num)
        {
                this.num=num;
        }
        public int getNum()
        {
                return this.num;
        }
        void show()
        {
                System.out.println("father");
        }
}
//extends关键字是继承,调用父类的方法时,要放在子类的方法里面或者,构造函数
class Son extends Father
{
        private int nums;
        Son()
        {
                //默认的super函数
        }
        Son(int i)
        {
                this();
        }
        void show()
        {
                //super();默认的父类中的空参数的构造函数
                super.show();//继承父类,并定义新功能(重写)
                super.setNum(5);
                nums=super.getNum();
                System.out.println("nums="+nums);
        }
}
class ExtendsDemo
{
        public static void main(String[] args)
        {
                Son person=new Son();
                person.show();
        }
}

1 个回复

倒序浏览
不错。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马