面向对象
1、什么是面向对象
面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据。
对象,是具体的事物。类,是抽象的,是对对象的抽象。
2、类与对象的关系
类是对某一类事物的整体描述,如猫、狗、人等
对象是是抽象事物的具体实例,比如我家的狗叫小白
3、对象和引用的关系
引用 “指向” 对象
使用类类型、数组类型、接口类型声明出的变量,都可以指向对象,这种变量就是引用类型变量,简称引用。
在程序中,创建出对象后,直接使用并不方便,所以一般会用一个引用类型的变量去接收这个对象,这个就是所说的引用指向对象.
总结:对象和引用的关系,就如电视机和遥控器,风筝和线的关系一样。
构造器
类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。
构造器有以下俩个特点:
- 必须和类的名字相同
- 必须没有返回类型,也不能写void
作用:
- 使用new创建对象的时候必须使用类的构造器
- 构造器中的代码可以给对象中的属性初始化赋值
public class Person{//Person 类
public Person(){
//这就是一个无参构造器,一般类中会默认生成
}
=======================================
public Person(String name){
//这是一个有参构造器,当类中存在有参构造器时,必须重新定义一个显示的无参构造,否则不能调用
}
}
其中,有参构造器是无参构造器的重载
封装
封装的步骤:
- 使用private关键字修饰需要封装的成员变量
- 使用get、set方法去读取或修改私有的成员变量,所以get、set方法必须是公开的。
public class Demo{
private int A;
public void setA(int A){
this.A = A;
}
public int getA(){
return this.A;
}
}
封装的作用:
- 提高程序的安全性
- 隐藏代码细节
- 统一调用接口
- 便于维护
继承
Java类中只有单继承,没有多继承
public class Father{
//父类
}
public class Son extends Father{
//子类 使用extends关键字继承了父类的属性和方法
}
一个父类可以有多个子类
一个子类只能继承一个父类
其中,父类私有的属性和方法(使用private关键字进行修饰)子类不能继承
子类的构造器会隐式调用父类的无参构造器
Object类是所有类的父类
Super、This关键字
在子类中,使用this表示访问子类中的属性和方法;使用super表示访问父类中的属性和方法
super只能出现在子类的方法或构造器中;如果在构造器中,必须是构造器的第一行代码
使用super调用父类方法后不能再使用this关键字调用方法,因为this也必须在构造器的第一行
方法的重写
子类中重写后的方法和父类完全一致,只有代码部分不同
重写条件:
- 只存在于子类和父类之间
- 静态方法不能被重写
- 父类的私有方法(private关键字修饰)不能重写
重写语法:
- 方法名必须相同
- 参数列表必须相同
- 权限修饰符:子类>父类
- 返回值类型:子类<父类
- 抛出异常类型:子类<父类
和重载的对比:
- 方法名必须相同
- 参数列表必须不同(个数、类型不同均可)
- 返回值类型可相同可不相同
多态
多态就是一个动态编译的过程,让我们不用知道某个对象的具体类型,就能使用该对象的一些方法
多态是方法的多态,和属性无关
多态存在的条件:
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
父类方法→子类
子类重写方法:调用重写的方法
子类不重写方法:调用子类继承父类的方法
子类中独有方法的调用:只能通过new子类对象的方法来调用
抽象类
abstract声明方法:抽象方法
abstract声明类:抽象类
例子:
public abstract class Demo{
//这是一个抽象类
}
public abstract void Add();//抽象方法 去掉大括号
抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。
抽象类中声明的方法是继承给子类的,抽象类不能通过new来创建对象
有抽象方法→一定是抽象类→继承给子类
子类实现抽象方法:正常类
子类不实现继承来的抽象方法:声明子类为抽象类
抽象类、抽象方法的作用:
起框架作用,可以减少代码
接口
声明接口的关键字:interface
接口可以多继承(继承关键字extends)
接口中的方法都是抽象方法(默认关键字public abstract);接口中的类都是静态变量(默认关键字public static final)
接口的多继承:
public interface A{
public void A1();
}
======================
public interface B{
public void B1();
}
======================
public interface C extends A,B{
public void C1();
}
接口的实现:
public class Face implements D,E,F{//D,E,F均为接口 实现关键字implements
//Face类中要实现接口D,E,F中的所有方法,否则就要被声明为抽象类 因为有抽象方法没实现
}
但是接口不能实现接口