面向对象的三大特征:封装,继承,多态
一.封装
1.概念
将类的某些信息在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
2.封装案例
案例一:将类中成员变量私有化。(标准的Javabeen)
案例二:将类中的方法私有化。(Java设计模式:解决某种问题的固定的方式(算法),单例模式:让一个类在一个程序中只能创建一个对象)
下面是一个标准的Javabeen(标准Javabeen就具有封装的特征):
二.继承
1.概念
将同一事物中共性的属性和行为进行抽取,定义在一个基类中,其他类继承基类,就可以拥有基类的功能,实现了代码的复用性,子类还可以在自己中扩展子类自己特有的功能,而不影响其他类。
2.条件
只要符合is-a(什么是什么)就可以使用继承。
3.实现
继承关系需要使用extends关键字来实现,具体格式如下:
class 类A{
}
class 类B extends 类A{
}
称类A为父类/基类
称类B为子类/派生类
4.继承的优点
①提高了代码的复用性
②减少了代码的冗余
③增强了程序的扩展(在子类中扩招自己的特有的功能)
注意:①一个类没有显式地继承,那么这个类默认继承Object类,Object类是Java中所有类的超类。
②一个类只能直接地继承一个类,间接的继承多个类,并且一次只能继承一个类。
5.方法的重写
当父类的方法实现不能满足子类的需求时,可以在子类中对于方法进行重写(覆盖)。
class Animal {
private String name;
private int age;
public void eat(){
System.out.println("吃东西");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class Dog extends Animal{
public void lookhome(){
System.out.println("狗看家"); //Dog中特有的方法
}
@Override
public void eat() {
System.out.println("狗啃骨头"); //重写的eat()方法
}
}
重写的要求
①子类重写的方法结构与父类方法的结构必须一致。
②子类重写的方法名称,方法参数,返回值都必须一致,还有访问权限不能小于父类的访问权限。
③私有权限的方法不能重写。
④子类方法抛出的异常不能大于父类被重写的方法的异常。
@override(Java中的一个注解.标签)
表示子类中下来要写的方法是从父类中重写过来的,编译器会检测此个方法是否与父类被重写的方法结构一致,这个注解就算不写,只要个是满足要求,也是正确的方法覆盖重写。
优点:
①这样编译器可以帮助我们检查格式。
②另外也可以让阅读源代码的程序员清晰地知道这是一个重写的方法。
注意:构造方法,静态方法,成员变量不存在方法重写。
6.super关键字
super关键字可以调用父类中的属性,构造方法。成员方法。
注意:尤其当父类出现童名成员时,可以使用super表示是父类中的成员。super的追溯不仅限于直接父类还可以是父类的父类。
super 和 this 的用法很像,this 代表本类对象的引用,super代表父类的内存空间的标识。
super表示调用父类中的成员,而不是调用父类对象。
7.继承中的构造方法
在创建子类对象时,必须在子类构造方法的首行去调用父类的空参构造去确保父类成员变量初始化。
规定:super(参数)必须写在子类构造方法的首行。
eg:
class Dog extends Animal {
public Dog(){
//super();
System.out.println("Dog类的无参构造");
}
public Dog(String name,int age){
super(name, age);//如果不写此语句,会默认存在一个super()
}
}
常见错误:如果子类构造器中即未显示调用父类或本类的构造器,且父类中有没有空参的构造器,则编译会报错。
8.抽象类
①抽象方法
是一种特殊的方法,只有声明,没有实现。
抽象方法必须使用 abstruct 关键字修饰,无方法体。
public abstruct class Animal{
public abstruct void eat();
}
②为什么要有抽象方法
在一些体系结构的顶端类中,有些共嫩没有必要实现,因为不同子类中实现都不同,这个时候就可以将此方法设置为抽象方法。
③抽象类
使用 abstruct 修饰的类
一个类中若有抽象方法,则该类也必须是抽象类。
④特点
a:不可实例化对象,其他功能与正常类相同,可以有构造方法,成员变量,成员方法。
b:在上层定义功能,让子类继承实现。
注意:一个类如果继承了抽象类,要么重写抽象类中所有的抽象方法,要么将该类也设置为抽象类。