Java学习 - 继承与多态
1.继承
2.多态
3.构造方法
4.重载
5.重写
6.super与this的区别
7.static,final,abstract的用法
8.接口
一 什么是继承
如: 儿子继承父亲的财产
继承就是由一个类,派生出一个个类,派生出的类具有上一级类的属性和功能,这种关系叫继承
为什么要使用继承? 为了扩展子类的功能,简化代码开发
1 提高编程的效率
2 减少代码的重复使用
3 提高代码的可读性和可维护性
语法:关键字 extends
class 子类名 extends 父类名 { 属性; 行为: /* 它只继承了父类中 非私有属性和方法。 */ }
特点规则:java只支持单继承,一个子类只能有一个父类
例:A extends B,B extends C;
不可以写
A extends B,C; A extends B extends C; 继承的具体使用: 子类可以继承父类中的一般属性和方法,但是除private以外 子类可以再继承关系中拥有自己的属性和方法 继承的特征: 1 必须有extends关键字 2 子类在调用本类的构造方法时,必须先调用父类的构造方法 3 子类默认父类的隐式构造,如果父类没有,只有有参构造,则必须调用父类的构造方法 4 调用父类中属性或方法必须使用super关键字 分析:会继承父亲的所有事物吗?比如儿子会继承父亲的名字、相貌等吗
二 什么是多态
多态就是一般类中定义的属性和行为,被特殊类继承后,可以具有不同的数据类型或表现出不同的行为
继承的体现就是多态
三 什么是构造方法
概念: 方法名与类名相同,并且没有返回值(包括void)
作用:
1 在创建对象的时候调用
2 给属性初始化(赋值)
特点:
1 如果不显示声明一个构造方法,系统或自动生成一个
2 如果显示声明一个有参构造方法,那么系统将不会自动创建无参的构造方法
四 什么是重载 重载和重写体现了多态
在同一个类中,如果出现方法名相同,参数的类型,个数,顺序不同,就叫做重载。(同名不同参)
常见的,构造方法的重载。
什么是重写
在子类中,如果出现了与父类中完全相同的方法(修饰符可以不同,但是子类的修饰权限必须大于等于父类的修饰权限),就是方法的重写
public > protected > default > private
注意:调用的始终都是重写之后的方法。
五 子类对象的产生过程
创建子类对象,一定先执行父类构造方法
super在子类构造方法中调用父类的有参数的构造方法
六 super的作用
1 在子类的构造方法中,第一行使用,默认调用父类无参数构造方法,也可以调用有参数的
super() super(参数列表)
2 在子类中,使用super相当于父类的对象,可以调用父类中的所有非私有属性和方法。private除外
七 this的作用
1、在当前类中使用,相当于是当前类的对象,可以调用当前类的属性和方法,private除外
2、在当前类的构造方法中,第一行使用,可以调用当前类的构造方法。
八 static的作用
1 static关键字可以修饰变量和方法,修饰变量叫做 静态变量,修饰方法叫做静态方法。
2 没有被static修饰的方法和变量,实例变量和实例方法
注意:
1、被static修饰的变量和方法,属于类的,在内存中只分配一块存储空间,所有对象都共享此空间。所以被static修饰的方法和变量可以直接使用类名调用。
2、在静态方法中,只能使用静态变量和调用静态方法。
3、在静态方法中,不能使用this关键字
九 final的用法
final关键字可以修饰类,方法,变量
1 修饰变量,那么就是常量
final float PI=3.14f;
2 修饰类,那么该类不能被继承
final class Person { } //错误 class Student extends Person { 报错 }
3 修饰方法,那么该方法不能被重写。
十 abstract的用法
抽象类
对象是通过类进行描述的。 当一个类的信息不足以描述一个对象的时候,这个类就是抽象类。
在程序中使用 abstract关键字修饰的类就是抽象类
语法:
abstract class 类名 { 属性; 行为; }
抽象方法
只有方法的声明,没有方法体
语法1:
abstract 修饰符 返回值 方法名(参数列表);
语法2:
修饰符 abstract 返回值 方法名(参数列表);
注意:
1 在抽象类中,可以有抽象方法。也可以没有
2 如果一个类中出现了抽象方法,那么这个类一定是抽象类。
3 抽象类不能直接创建对象,只能使用子类进行创建
4 子类继承了抽象类,那么必须重写父类中的所有抽象方法。除非子类本身也是抽象类。
十一 接口
提供一种标准和规范。供使用者调用。
在程序中,使用关键字 interface修饰的 就是接口,接口就是抽象方法和常量的集合。
语法:
修饰符 interface 接口名 { 抽象方法; 常量(少用) }
注意:接口与 类的级别是相同的。
接口的规则:
1 接口可以实现多重继承
interface 接口1 extends 接口2,接口3,接口4... { }
注意:1 接口的使用,只能通过类进行实现,语法格式:
class 类名 implements 接口1,接口2,接口3、、、 { // 类实现了接口,必须重写该接口中的所有抽象方法,除非当前类也是抽象类。 }