上篇博客中我们初步认识了Java面向对象编程,下面进一步学习下。
面向对象编程三大特性:封装、继承、多态。
封装隐藏了类的内部实现机制,对外界而言它的内部细节是隐藏的,暴露给外界的只是它的访问方法。
继承是面向对象程序设计的基本特性之一,其基本语法为:
public class A extends B {}
表示类A继承了类B,其中:类A称为子类、派生类或孩子类,类B称为超类、基类或父类。
重写是只能应用在方法上,其注解为@Override,方法的重写只能发生在存在继承关系的类中,需要注意:重写方法与原来方法签名要相同,即方法名称和参数要相同,包括顺序。
抽象类中可以定义抽象方法,使用abstract修饰,也可以定义普通方法,包含抽象方法的类必须是抽象类,而抽象类不是必须包含抽象方法。对于抽象方法来说,仅定义一个声明即可,即抽象方法无方法体。抽象类的简单声明为:
pubic abstract class A {}
抽象方法的简单声明为:
public abstract int getA();//无方法体
注意:抽象类是不能直接实例化的,如果要获得该类的实例可以使用静态方法创建其实现类对象。
多态是面向对象程序设计的基本特性之一,Java的多态主要是通过重写父类(或接口)中的方法来实现的,好处是可以屏蔽对象之间的差异,从而增强了软件的扩展性和重用性。
下面通过一个实例来说明下上面所说的特性:
(1)任务:通过实例进一步熟悉封装、继承、重写、抽象、多态等的使用
(2)准备工作:了解封装、继承、重写、抽象、多态
(3)编程:
定义父类Car:
public abstract class Car {
public abstract String getInfo();
}
定义子类BMW,继承类Car:
public class BMW extends Car{
//重写父类的方法
@Override
public String getInfo() {
return "BMW";
}
}
定义子类Benz,继承类Car:
public class Benz extends Car{
//重写父类的方法
@Override
public String getInfo() {
return "Benz";
}
}
定义类CarFactory,并定义静态方法,通过指定车型创建对象(简单工厂模式的应用):
public class CarFactory {
public static Car getCar(String name){
if(name.equalsIgnoreCase("BMW"))
return new BMW();
else if(name.equalsIgnoreCase("Benz"))
return new Benz();
else
return null;
}
}
定义测试类TestCar:
public class TestCar {
public static void main(String[] args) {
Car bmwCar = CarFactory.getCar("BMW");
System.out.println("车型为:"+bmwCar.getInfo());
Car benzCar = CarFactory.getCar("Benz");
System.out.println("车型为:"+benzCar.getInfo());
}
}
(4)运行:输出相应对象信息
上面的实例应用到了工厂模式,也有其他的一些模式,比如:策略模式、适配器模式等,这里不做阐述了,自行学习下吧。
在类中,除了可以定义域、方法和块,还可以定义类,这种类称为内部类,其简单的声明语法为:
public class Outter{
class Inner{}
}
内部类可以使用外部类中定义的属性和方法,即使为私有的。它可以分为普通内部类、局部内部类(将类定义在方法的内部)、匿名内部类、静态内部类(使用static修饰的内部类),具体的使用不做详述了。
在Java中,调用类的方法有两种方式:对于静态方法可直接使用类名调用,对于非静态方法必须使用类的对象调用。
当然,还有很多需要注意的地方,这里不做补充了,大家在编程中遇到时注意就好了。