1.继承
继承是一种严格的父子关系(在父类里面抽取的属性和方法一定是所有子类所共有)(Student继承Person,那么Student就是人)
面向对象特征: 抽象、封装、继承、多态
OOP: Object Oriented Programming 面向对象编程
UML: 类图(描述类和类之间的关系)
Java是单继承,就是一个类只能继承extends(inherit)一个类,而java这中面向对象的语言就是对现实世界的描述,现实世界中是存在很多继承,但是java里面是支持实现多个接口。
Object是所有类的父类(这个父类不一定是直接父类)
private:只在当前类里面可以访问(子类也不能访问)
public:任何地方都可以访问
protected:提高代码复用性。
将所有子类共有的属性和方法抽取到父类里面,子类继承父类,那么父类里面的属性和方法相当于子类里面也有。
2.方法的重载 overload
在同一个类里面,允许存在一个以上同名方法,只要他们参数类型和参数个数不同即可。
构造方法重载(无参构造方法、有参构造方法)
方法重载特点:与返回值无关,只看参数列表。
void show(int a, char b, double c){}
1、void show(int x, char y, double z){} 不是重载,是同一个方法
2、int show(int a, double c, char b){} 是重载,参数顺序不一样,和返回值无关
3、void show(int a, double c, char b){} 是重载,参数顺序不一样
4、boolean show(int c, char b){} 是重载
5、void show(double c){ } 是重载
6、double show(int x, char y, double z){} 不是重载
3.重写(覆盖)@Override:toString()
1、子类覆盖父类,必须保证子类权限大于父类权限才可以覆盖,否则会编译失败。
2、如果父类是private的方法,子类是默认方法,那么子类是不知道这个方法的,不是覆盖。
重载(Overload):同一个类中看同名方法的参数列表。(构造方法重载)
重写(Override):父子类方法要一模一样
4.多态
面向接口(抽象)编程
Cal.java
public abstract class Cal {
int num1;
int num2;
public Cal() {
}
public Cal(int num1, int num2) {
this.num1 = num1;
this.num2 = num2;
}
public abstract int getResult();
}
Sub.java
public class Sub extends Cal{
public Sub() {
}
public Sub(int num1, int num2) {
super(num1, num2);
}
@Override
public int getResult(){
return num1 - num2;
}
}
Add.java
public class Add extends Cal{
public Add() {
}
public Add(int num1, int num2) {
super(num1, num2);
}
@Override
public int getResult() {
return num1 + num2;
}
}
Demo.java
import org.junit.Test;
public class Demo {
@Test
public void test1(){
Add add = new Add(2,3);
int result1 = add.getResult();
System.out.println(result1);
Sub sub = new Sub(3,1);
int result2 = sub.getResult();
System.out.println(result2);
Cal cal = new Add(1,2);
int result3 = cal.getResult();
System.out.println(result3);
add = new Add(1,2);
show(add);
}
public void show(Cal cal){
int result = cal.getResult();
System.out.println(result);
}
}
5.抽象类
1、抽象方法是没有方法体,如果这个类里面有抽象方法,这个类必须变成抽象类。
2、如果这个类是抽象类,并不要求这个类一定要有抽象方法
3、抽象类里面可以有普通方法,也可以有抽象方法。
4、如果一个类是抽象类,那么这个类就不能被new实例化,只能被其他类继承。
5、抽象方法可以理解为父类(抽象类)定义的一个模板或者规范(自己本身不实现),
子类必须实现这个抽象方法,如果子类不想实现这个方法,那么这个子类也必须要变成抽象类。
6.如果一个类里面有抽象方法,那么这个类一定是抽象类
6.接口interface
接口是一个纯粹的抽象类(接口里面所有的方法都是抽象方法)
接口就是一个规范,他没有提供任何是实现,具体的功能由实现接口的子类去实现。
接口就是一个规范,可插拔(可以被替换,首先定义一个标准(接口),大家都遵守这个标准,就可以实现互相之间替换)
1、接口是一个纯粹的抽象类,接口里面的方法都是抽象方法 public abstract。
2、接口里面所有的属性public static final
publicvoidtest1() {
DaYandaYan=newDaYan();
daYan.egg();
daYan.fly();
daYan.print();
// bird是站在AbstractBird这个类角度去看new出来的DaYan这个对象,
// 所以只能看到egg()这个方法
AbstractBirdbird=newDaYan();
bird.egg();
// bird.fly();
// bird.print();
// 站在能不能飞IFly的角度去看DaYan,只能看到fly()这个方法
IFlyfly=newDaYan();
fly.fly();
//fly.egg();
//fly.print();
fly=newGeZi();
fly.fly();
}
继承是严格的父子关系,你继承什么你就是什么:鸽子就是鸟。
父类是抽取了所有子类的共同特征,父类里面的属性和方法是所有子类所共有的属性和方法。
接口是一个标准,一般用在能不能具有某个功能。
把能不能飞定义称为一个接口IFly,实现了这个接口的类就具有了这个功能。