1、继承this
一、继承的概念spa
继承机制是面向对向程序设计不可缺乏的关键概念,是实现软件可重用的根基,是提升软件系统的可扩张性与可维护性的主要途径。(它容许建立分等级层次的类)。设计
继承是指一个类的定义能够基于另外一个已经存在的类,即子类基于父类,从而实现父类代码的重用,子类能吸取已有类的数据属性和行为,并能扩张的能力。对象
二、继承形式继承
【访问权限修饰符】【修饰符】子类名 extends 父类名 {子类体} 以下:get
public class Father {it
public void draw(){编译
}程序设计
}class
public class Son extends Father{
public double getDiameter(){
return 0.0;
}
}
三、继承的做用:代码的复用
public class Father {--------------父类
public void draw(){
}
}
public class Son extends Father{------------------子类
public double getDiameter(){
return 0.0;
}
}
//演示代码:子类对象能够直接调用父类的方法,强调复用性
Son s = new Son();
son.draw();
四、继承的特性
子类拥有父类非private的属性,方法;
子类能够拥有本身的属性和方法,即子类能够对父类进行扩展
子类能够用本身的方式实现父类的方法
extends的继承是单继承的,就是一个子类只能继承一个父类
2、构造方法与继承
一、继承中构造方法的调用
子类构造方法老是先调用父类的构造方法
默认状况下,调用父类无参构造方法
可在子类构造方法的第一行,使用super关键字调用父类任意一个构造方法
二、子类调用父类构造方法的缘由
Java 语言中,要求子类有责任保证它所继承的父类尽快进入到一个稳定、完整的状态中。若是没有这个约束,那么子类的某个继承自父类的方法可能会使用到父类中的一些变量,而这些变量并无进行初始化,从而产生一些难以预料的后果。
三、子类构造方法的执行详解
必须将调用父类构造方法的这条语句放在子类构造方法的第一条语句位置。若是第一条语句没有调用父类的构造方法,系统将会自动地在这个位置上插入一条调用父类默认构造方法的语句,即super();
因为默认的构造方法不带参数,因此,若是在父类中定义了带参数的构造方法,而没有定义不带参数的构造方法将会出现编译错误。这也正是建议你们在定义带参数的构造方法时,必定要定义一个不带参数的构造方法的缘由所在;
父类中那些带参数的构造方法,子类将不会自动地调用它们,必须人工地将调用它们的语句写入子类的构造方法中。
四、继承中累的属性
在子类中,若没定义属性则继承父类属性;若定义属性没赋值则被重写为默认值0.
3、this 关键词
一、this关键字的用途
this关键字表明自身,在程序中主要的用途:
使用this关键字在自身构造方法内部引用其余构造方法;
使用this关键字表明自身类的对象;
a.直接使用this
b.使用this关键字引用成员变量
c.使用this关键字引用成员方法
注意:this关键字必须放在非静态方法里面
二、this引用成员变量
在一个类的方法或构造方法内部,可使用“this. 成员变量名“这样的格式来引用成员变量名,经常用来区分同名的成员变量和局部变量。
public class Company{
private int a;
public Company (int a){
this.a = a;
}
public int getA(){
return a;
}
public void setA(int a){
this.a = a;
}
三、this引用构造方法
在一个类的构造方法内部,也可使用this关键字引用其余的构造方法,这样能够下降代码的重复,也能够是全部的构造方法保持统一,这样方便之后的代码修改和维护,也方便代码的阅读.
public class Company{
int a;
public Company(){
this(0);
}
public Company(int a){
this.a = a;
}
}
四、this引用成员方法
在一个类的内部,成员方法之间的互相调用是也可使用"this . 方法名(参数)"来进行引用.
public class Company{
Company instance;
public void sell(){
System.out.println("sellSoft");
}
public void doSell(){
this.sell();
}
}
五、this表明自身对象
在一个类的内部,也可使用this表明自身类的对象,或者换句话说,每一个类内不都有一个隐含的成员变量,该成员变量的类型的该类的类型,该成员变量的名称是this
pubilc class Company{
Company instance;
public Company(){
instance = this ;
}
public void test(){
System.out.println(this);
}
}
4、super关键字
一、super关键字表明父类的引用,在程序中主要的用途
在子类构造方法中要调用父类的构造方法,须要注意:super语句只能出如今子类构造方法体的第一行;
当子类方法体中的局部变量或者子类的成员变量与父类成员变量同名时,即子类局部变量覆盖父类成员变量时,用“super.成员变量名”来引用父类成员变量;
当子类的成员方法覆盖了父类的成员方法时,也就是子类和父类有彻底相同的方法定义(方法体能够不一样),此时,用“super.方法名(参数列表)”的方式访问父类的方法;
与this的区别,this一般指代当前对象,super一般指代父类。
二、子类构造方法中要调用父类构造方法
在子类构造方法中要调用父类的构造方法,须要注意:super语句只能出如今子类构造方法体的第一行
class Base {
Base() {
System.out.println("Base");
}
}
public class Checket extends Base {
Checket() {
super(); / /调用父类的构造方法,必定要放在方法的首个语句
System.out.println("Checket");
}
public static void main(String argv[]) {
. Checket c = new Checket();
}
}
三、super调用父类成员变量或方法
子类中的成员变量或方法与父类中的成员变量或方法同名。由于子类中的成员变量或方法名优先级高,因此子类中的同名成员变量或方法就隐藏了父类的成员变量或方法,可是咱们若是想要使用父类中的这个成员变量或方法,就须要用到super。
class Country {
String name;
void value() {
name = "China";
}
}
class City extends Country {
String name;
void value() {
name = "Dalian";
super.value(); //不调用此方法时,super.name返回的是父类的成员变量的值null
System.out.println(name);
System.out.println(super.name);
}
public static void main(String[] args) {
City c=new City();
c.value();
}.
}
四、this和super
this一般指代当前对象,super一般指代父类对象。
5、方法覆盖(重写)
一、方法覆盖的定义
子类能够重写父类中某一方法,称为方法覆盖,也称方法重写,是继承中很是重要的知识点。若是子类须要修改从父类继承到的方法体,就可使用方法覆盖。
二、方法覆盖的原则
同名、同参、同返回值、访问权限不能缩小。
重载再总结:同方法名、参数类型不一样(数量,顺序,类型)、与返回值无关。