复习
类的标准写法:属性私有、无参构造器、有参构造器、setget()参数、toString()方法。
static:可以修饰成员属性(成员方法、成员变量)通过类名.可以直接调用方法。一般是用作工具类。static修饰的属性只有一份,放在常量池中,给所有对象共享。
代码块:局部代码块、构造代码块(2)、静态代码块(1)、同步代码块。
1.继承的概述
- 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。
- 子类可以直接访问父类中的非私有的属性和行为
- 通过extends关键字让类与类之间产生继承关系。
class SubDemo extends Demo{}
补充1:继承 一个类继承一个类 被继承的类叫做父类。用extends来实现继承。
补充2:子类能够继承父类非私有的属性,构造器不能被继承。
2.继承的特点
- Java只支持单继承,不支持多继承。
一个类只能有一个父类,不可以有多个父类。
class SubDemo extends Demo{} //ok
class SubDemo extends Demo1,Demo2.... //error
- java支持多层继承(继承体系)
class(A){}
class B extends A{}
class C exteends B{}
3.继承中的成员变量
- 如果子父类中出现非私有的同名成员变量时,子类要访问本类中的变量用this; 访问父类中的同名变量super。
- super的使用和this的使用几乎一致。
- this代表的是本类对象的引用;super当前子类对父类的应用。
- 如果子类中的局部变量和父类中的属性相同,那么就会发生就近原则。
补充1:public class Girl extends Person(){
int age=20;//当子类有和父类同名的属性时
public void test(){
System.out.println(age);//20
System.out.println(this.age);//20 当前类的age
System.out.println(super.age);//19 父类的age
}
public void cry(){//方法的重写:发生在父子类之间 方法名相同参数相同
//子类可以修改从父类继承过来的方法实现。
System.out.println(“默默地哭。。。”);
}
public void test2(){
String name=”qwer”;
System.out.println(name);//java中的就近原则
//System.out.println(this.name);//指父类中的name 想要调用父类继承过来的就要用this.
}
}
4.类中的成员方法
- 当子类出现和父类一模一样的函数时,当子类对象调用该函数,会运行子类函数的内容。如同父类的函数被覆盖一样。
- 继承这种情况时函数的另一个特性:重写(覆盖)(override)和重载overload,重写的应用举例:siri。
5.方法的重写
- 子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者覆盖。
- 父类中的私有方法可不可以被覆盖呢?子类根本就看不到父类的方法。
- 在父类覆盖方法中,继续使用被覆盖的方法可以通过super();函数名获取。
- 覆盖注意事项:方法重写 两同两小一大覆盖时,子类方法权限一定要大于等于父类方法权限。
- 覆盖的应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
补充1: 两同 指方法名相同 参数列表相同。
两小 指返回值类型(引用数据的类型 而且时父子类的关系)要小于等于父类的 抛出的异常要小于等于父类的。
一大 指访问修饰词的范围要大于等于父类的。
补充2:java三大特征:封装 继承 多态。
6.继承中的构造方法
- 在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐士语句super()。
- super():会访问父类中的空参数构造函数,而且子类中所有的构造函数默认第一行都是super()。
7.super关键字
- super和this的用法很像。
- This代表对象的引用和(谁调用就代表谁)。
- super()代表当前子类对象父类的引用。
- 当子父类出现同名成员时,可以用super进行区分。
- 子类要调用父类构造参数时,可以使用super()语句。
8.继承的优缺点
优点:提高了代码的复用性、提高了代码的可维护性。
缺点:类的耦合性增强了;开发的原则:高内聚低耦合;内聚:就是自己完成某件事情的能力。耦合:类与类的关系。
9.多态
- 指一个事物以多种形式存在。多态实际上说的就是方法。
- Java中多态的体现和前提:
(1)必须要有父类类型至香港子类对象。Person p = new Girl();
(2)必须有方法的重写。
- 运行时调用属性是父类的属性 运行时调用方法时子类的方法。
补充1:
运行期间绑定:会提示时父类的方法。
编译期间绑定:运行时真正调用的是子类的。
补充2:当发生多态时,调用属性看等号左边 调用方法看等号右边。
10.抽象类概述abstract
- 抽象定义:抽象是从多个事物中将共性的,本质的内容抽取出来。
例如:男人女人 都是人。
- 抽象类:Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。
11.抽象类的特点
- 抽象方法一定在抽象类中。
- 抽象方法和抽象类都必须被abstract关键字修饰。
- 抽象类不可以用new创建对象,因为调用抽象方法没意义。
- 抽象类中的抽象方法要被使用,必须由子类重写(覆盖)其所有的抽象方法后,建立子类对象调用;如果子类只覆盖了部分的抽象方法,那么该子类还是一个抽象类。
- 抽象类中可以有抽象方法也可以有非抽象方法。
- 抽象类和一般类没有太大的不同:该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂得东西。这些不确定的部分,也就是该事物的功能,需要明确出现。但是无法定义主体,也就是比一般类多了抽象方法而已。
- 特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。
补充1:抽象类不能实例化。
补充2:一个类要继承另一个类,那么这个类就要重写抽象类里面的所有抽象方法。
补充3:含有抽象方法的类一定是抽象类。
12.抽象类成员的特点
- 成员变量:可以有变量、可以有常量。
- 构造方法:可以有构造方法。
- 成员方法:可以有抽象方法、可以有非抽象方法。