2017-09-19
什么是继承?
子类基于父类,从而实现父类代码的重用,提高软件系统的可扩展性与可维护性;
继承的特点?
子类继承了父类的属性及方法,并能扩展新的能力;子类对象可以直接调用父类的方法
继承的形式:
【访问修饰符】【修饰符】子类名 extends 父类名{子类体}
继承中构造方法的调用?
子类构造方法总是先调用父类的构造方法;
默认情况下,调用父类无参的构造方法;
可以在子类构造方法的第一行,使用super关键字调用父类中任意一个构造方法;
this关键字:
使用this关键字在自身构造方法内部引用其它构造方法
使用this关键字代表自身类的对象:
直接使用this
使用this关键字引用成员变量
使用this关键字引用成员方法
(this 关键字必须用于非静态的方法中)
This引用成员变量
在一个类的方法或构造方法的内部,可以使用this.成员变量;常常用来区分同名的成员变量和局部变量;
This引用成员方法
在一个类的内部,成员方法之间的互相调用时也可以使用“this.方法名(参数)”来进行引用;
This代表自身对象
每个类内部都有一个隐含的成员变量,该成员变量的类型是该类的类型,该成员变量的名称是this;
Super关键字:
1.在子类构造方法中要调用父类的构造方法,super语句只能出现在子类构造方法体的第一行。
2.当子类方法体中的局部变量或者子类的成员变量与父类成员变量同名时,即子类局部变量覆盖父类成员变量时,用“super.成员变量名”来引用父类成员变量;
3.当子类的成员方法覆盖了父类的成员方法时,此时,用“super.方法名(参数列表)”的方式访问父类的方法。
4.与this的区别,this通常指代当前对象,super通常指代父类。
方法覆盖的定义:
子类可以重写父类中某一个方法,称为方法覆盖,也称方法重写,是继承中非常重要的知识点。如果子类需要修改从父类继承到的方法的方法体,就可以使用方法覆盖。
方法覆盖的原则:
1.同名
2.同参
3.同返回值
4.访问权限不能缩小
Final修饰符:
Final修饰属性,局部变量,值不能被改变
Final修饰类,不能被继承
Final修饰方法,不能被子类覆盖、
父类:
public class Complete {
String strName = "聚美优品"; //企业名称
int iMoney = 100000; //注册资金
String strRange = "化妆品"; //经营范围
String strBoss = "陈欧"; //大boss
String strJiegou= "企业架构"; //企业架构
String strAdress= "杭州"; //公司地址
//生产经营
void product() {
System.out.println("父类:我是陈欧,我为自己代言");
}
//招人
void zhaoren() {
System.out.println("聚美优品大量招人中,欢迎广大贤才积极报名");
}
//业务
void yewu() {
System.out.println("我们有很多的部门");
}
//生产过程
void progress() {
System.out.println("生产过程");
}
//总结
void consult() {
System.out.println("总结");
}
//构造方法
//显式构造方法
Complete(){
System.out.println("父类的无参构造吧方法 啦啦啦啦啦 ");
}
//有参的构造方法
Complete(String strName){
this.strName = strName;
System.out.println("名字"+strName);
System.out.println("公司开始营业啦.....撒花 撒花 撒花");
}
}
子类:
public class Chanpin extends Complete {
//产品名称
String strName = "洗面奶";
//产品品牌
String strType = "兰蔻";
//产品的价格
int iMoney = 50;
//构造方法
Chanpin(){
System.out.println("子类无参构造方法----");
}
Chanpin(String strType){
super("小花");
System.out.println(super.iMoney);
this.strType = strType;
System.out.println("品牌:"+strType);
System.out.println("产品应有尽有,欢迎大家前来选购");
}
void use() {
System.out.println("按照说明方法进行使用");
}
//生产经营
void product() {
super.product();
System.out.println("子类:我是陈欧,我为自己代言");
}
}
Main
public class Main {
public static void main(String[] args) {
// Chanpin cp = new Chanpin(); //先调用父类的无参构造方法,在调用子类的构造方法
// Chanpin cp = new Chanpin("xing"); //先调用父类的无参构造方法,在调用子类有参构造方法 此时super()
Chanpin cp = new Chanpin("xing"); //先调用父类的有参构造方法,在调用子类有参构造方法 此时super("小花"),并放在子类有参的构造方法中
// System.out.println("公司名称: "+cp.strName);
System.out.println("注册资金: "+cp.iMoney); //调用子类的属性 当子类的属性与父类的属性相同时,调用父类的属性时,应该在子类的构造方法中输入:System.out.println(super.iMoney);
// System.out.println("经营范围: "+cp.strRange);
// System.out.println("公司老板: "+cp.strBoss);
//
cp.product();
}
}