【Java学习】面向对象(二)——封装、继承、多态、抽象


前言

本文将详细介绍面向对象的特性,封装、继承、多态以及抽象。使我们更深一层去理解面向对象的含义。

正文

一、类的继承

-继承

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面向对象的基础知识了,欢迎提出宝贵意见~

原文地址:https://www.cnblogs.com/txge/p/13973579.html