JAVA——面向对象之继承篇
面向对象的三大特性:
1、封装 :将共用的,重复的功能进行封装
2、继承:一共性抽取个父类,让子类继承 ,子类可以继承父类的属性和方法同样也可以“重写”父类的方法
形式: public class 子类 extends 父类{
}
3、多态:按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态
本章将重点给大家介绍继承
继承:
继承(英语:inheritance)是面向对象软件技术当中的一个概念。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
下面将以人类作为父类而学生类,教师类作为子类为大家说明子类与父类的实现形式。
//父类
public class Person{
String name;
int age;
String sex;
public void method(){
Sysyem.out.println("我是父类");
}
}
//子类,学生类
public class Student extends Person{
//通过extends关键字可以让子类继承父类的属性和行为
//也可以增加新的属性和方法
int grade;
@Override
public void method(){
System.out.println("我爱学习");
}
}
这样一来子类就继承了父类 name,age,sex等属性。
重载与重写
重载:
-
1. 在一个类中
-
2. 方法名相同
-
3. 参数(类型不同、个数不同)
重写规则:
-
1、方法名和参数必须一致
-
2、注解@Override重写 检测是否是重写
-
3、返回值类型必须【小于等于】父类方法的返回值
-
4、权限必须【大于等于】父类方法的权限
-
a.public 公共的公开的,最大权限
-
b. protected 受保护的
-
c. (default) 默认权限
-
d. private 私有的
如上所示,方法method就在子类中重写
super关键字与this关键字
super: 1. 加载构造器
a. 子类的构造器会默认加载父类的构造器,通过 super();
b. 构造器只能调用一次,不可调用多次
c. 调用构造器的行为必须写在第一行
2. 调用父类成员变量 super.变量
3. 调用父类成员方法 super.方法()
this:1、用this. 可表示当前对象
2、在构造器首行表示调用其他构造器
//父类
public class Person{
//父类属性
String name;
int age;
String sex;
int num=10;
//父类构造器
public Person(){
System.out.println("我是父类无参构造器");
}
//父类方法
public void method(){
System.out.println("我是父类的方法");
}
}
//子类
public class Student extends Person{
int num=20;
int age;
//子类无参构造
public Student(){
//会默认加载父类无参构造
this(18);
System.out.println("我是子类无参构造器");
}
//子类有参构造
public Studet(int age){
this.age=age;
}
//重写父类方法
@Override
public viod method(){
int num=30;
System.out.println("局部变量为:"+num);
System.out.println("本类的成员变量为:"+this.num);
System.out.println("父类的成员变量为:"+super.num);
}
}
接口
jdk 1.7:
-
接口遵循大驼峰命名规则
interface 关键字修饰a、接口中只能有 final 常量和抽象方法
b、常量使用 final 修饰,表示不可变
c、常量名全大写和下划线来区分d、方法必须是 public,默认就是 public
jdk 1.8:
1、可以有默认方法,使用 default 修饰
2、静态方法
//接口
public interface HelloWorld {
// 常量
final int MAX_NUM = 10;
// 抽象方法
void method();
// 默认方法
default void defaultMethod() {
System.out.println("我是默认方法。");
}
//静态方法
static void staticMethod() {
System.out.println("我是静态方法。");
}
}
//子类
public class Zi implements HelloWorld {
@Override
public void method() {
System.out.println("重写接口中的抽象方法。");
}
}