目录
前言
本文将详细介绍面向对象的特性,封装、继承、多态以及抽象。使我们更深一层去理解面向对象的含义。
正文
一、类的继承
-继承
1.定义
在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的心类被称作子类,现有类被称作父类; 子类会自动拥有父类所有可继承的属性和方法。
2.关键字
extends
3.注意
①在Java中,类只支持单继承,不允许多重继承,相当于一个类只能有一个直接父类。
class A{}
class B{}
class C extends A,B{} //C类不可同时继承A类和B类
②多个类可以继承一个父类。
class A{}
class B extends A{}
class C extends A{} //类B和类C都可以继承类A
③在Java中,可以有多层继承,即一个类的父类也可以再去继承另外的父类。
class A{}
class B extends A{} //类B继承类A,类B是类A的子类
class C extends B{} //类C继承类B,类C是类B的子类,同时也是类A的子类
④在Java中,子类和父类是一种相对概念,也就是说一个类是某个类父类的同时,也可以是另一个类的子类。
-重写
1.定义
在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需对继承的方法进行修改,即对父类的方法进行重写。
2.注意
①在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。
②子类重写父类方法时,不能使用比父类中被重写的方法更严格的访问权限。
二、super关键字
1.定义
当子类重写父类的方法之后,子类对象将无法访问父类被重写的方法,此时可用 super 关键字用于访问父类的成员(成员变量、成员方法和构造方法)。
2.用法
①调用父类的成员变量和成员方法
super.成员变量
super.成员方法([参数1,参数2…])
②调用父类的构造方法
super([参数1,参数2…])
-注意
在定义一个类时,如果没有特殊需求,尽量在类中定义一个无参的构造方法,避免被继承时出错。
三、final关键字
1.特性
①final 修饰的类不能被继承
②final 修饰的方法不能被子类重写
③final 修饰的变量(成员、局部)是常量,只能赋值一次。
2.注意
在使用final修饰成员变量时,虚拟机不会对其进行初始化,因此需要我们在定义变量的同时赋予一个初始值。
四、抽象类
1.定义
抽象方法: 不包含方法体的方法为抽象方法,必须使用 abstract 关键字来修饰。
abstract void eat(); //定义抽象方法eat
抽象类: 当一个类中包含抽象方法,该类必须使用 abstract 关键字来修饰,使用abstract修饰的类为抽象类。
abstract class Fruit{ //定义抽象类Fruit
abstract int eat(); //定义抽象方法eat()
}
2.注意
①包含抽象方法的类必须声明为抽象类,但抽象类可以不包含任何抽象方法,只需使用abstract修饰即可;
②抽象类不可以被实例化,因为抽象类中有可能包含抽象方法,而抽象方法没有方法体,不可被调用;
③如果想调用抽象类中定义的方法,需创建一个子类,在子类中将抽象类中的抽象方法进行实现。
五、接口
1.定义
如果一个抽象类中的所有方法都是抽象的,则可以将这个类用另外一种方式来定义,即接口。
interface Animal{
int ID=1; //定义全局常量
void breath(); //定义抽象方法
void run();
}
2.关键字
Interface
3.特点
①接口中的方法都是抽象的,不能实例化对象
②当一个类实现接口时,如果这个类是抽象类,则实现接口中的部分方法即可,否则需要实现接口中的所有方法。
③一个类通过 implements 关键字实现接口时,可以实现多个接口,被实现的多个接口之间要用逗号隔开。
④一个接口可以通过 extends 关键字继承多个接口,接口之间用都好隔开。
六、多态
1.定义
在同一个方法中,由于参数类型不同而导致执行效果各异的现象就是多态。
2.用法
-对象的类型转换
-instanceof关键字: 判断一个对象是否为某个类(或接口)的实例或者子类实例。
对象(或者对象引用变量) instanceof 类(或接口)
-Object类
定义: 所有类的父类,即每个类都直接或间接继承自该类。
-匿名内部类
定义: 如果方法的参数被定义为一个接口类型,那么就需要定义一个类来实现接口,并根据该类进行对象实例化。除此之外,还可使用匿名内部类来实现接口。
结语
以上就是Java面向对象的基础知识了,欢迎提出宝贵意见~