持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,[点击查看活动详情]
静态函数中,不存在this这个关键词。
静态变量,我们在定义的时候,一般而言变量是不可修改的,加上final(地址不会改变)修饰
继承
继承是:当我们在定义若干个类时,发现某一些类中具有相同的属性和行为,那么,我们就可以将这些相同的部分进行抽取,独立生成另外一个类,那么这个生成出的类称之为父类,其他的被抽取内容的类称之为子类,子类与父类之间就是所谓继承关系。用extends关键词来表示。
class ExtendsDome{
public static void main(String[] args){}
}
class Person{
String name;
int age;
void eat(){}
}
class Student extends Person{
void study(){}
}
class Worker extends Person{
void work(){}
}
继承是一对多关系,单继承。如果是类与类之间(事务之间)必须是单继承,如果是接口与接口之间,可以多继承。
继承体系
在JAVA继承体系中,所有类的最终父类都是Object.
如果我们在定义一个类的时候,没有显著声明父类的时候,那么该类的父类默认是Object。
在分析设计继承时,要符合社会常识问题,子类必须是父类的同一系列的一种。
异常体系(类)
集合体系(类)
IO体系(类)
网络体系(类)
多线程体系(类)
成员变量
子父类中成员变量/静态变量的特点:如果只有子类有且非私有,则就调用子类的。如果只有父类有且非私有,则就调用父类的。(成员变量之间不存在重写关系的。)如果子父类都有且非私有,则就调用子类的。
子类成员函数在内部调用变量时顺序为:局部变量—子类对象成员—子类静态—父类成员—父类静态
子类.属性:找值时先到对象成员找再到子类静态找后到父类成员接着在父类静态中找。
class ExtendsDemo{
public static void main(String[] args){
Zi zi=new Zi();
System.out.println(Zi.mun);
}
}
class Fu{int num=20;}
class Zi extends Fu{
int num=10;
}
局部变量和成员变量如果重名了,用this区分(当前对象的引用),this(...):是当前类中,本类构造函数调用本类构造函数的方式。调用是单向的,最高调用的第一行是super。局部变量/成员变量和父类变量重名了,用super区分(不是父类对象的引用,而是父类空间的引用),super(...):是本类构造函数调用父类构造函数的方式。都必须在第一行。
构造函数
子父类中构造函数的特点:
现象:子类的构造函数在调用运行的时候,先执行父类的构造函数。(在子类的构造函数中,有一句默认的super(...)(如果父类没有默认无构造函数,那么子类构造函数中super()就失效了,所以在调用父类构造函数时,一定要注意父类构造函数的参数情况,super.)隐藏了,而且这句代码必须在第一行。:父类要事先准备。子类会继承到父类的一些数据,所以,在子类构造函数中,要让父类把数据进行初始化,才能继承给子类。父类的构造函数被调用,不代表父类就被创建对象了)
成员函数
子父类中成员函数的特点:
如果只有子类有且非私有,则就调用子类的。
如果只有父类有且非私有,则就调用父类的。
如果子父类都有且非私有,则就调用子类的(函数重写)。
函数组成:函数声明(权限,类型,返回值类型,函数名,参数列表),函数体(大括号里面的)。\
重写
函数重写:在子父类中,同名函数。用@override标记.第一行写super.函数名();
重写的意义:在多态(多态的前提是继承)
1,在子类继承了父类的函数声明,但是子类可以将该函数的具体实现进行优化和更改。
2,保留父类功能的声明,子类可以重新定义
注意:
1,当子父类中函数一旦重名(系统默认重写),那么返回值类型也要一样。
2,函数重名,参数列表相同,构造重写关系,返回值类型也必须是一样的。(函数重名,但参数列表不同,不构成重写关系)
3,子类重写父类函数时,权限要大于父类权限。如果父类权限为private,子类不能继承,没有重写。