前言
面向对象编程(Object-Oriented Programming,简称OOP)是一种流行的编程范式,它以“对象”为核心来设计和实现程序。Java是一种广泛使用的面向对象编程语言,具有丰富的面向对象特性。本文将对Java的面向对象特性进行总结和探讨。
一、封装性
封装性是Java面向对象编程的一个重要特性,它通过将数据和操作封装在类中来实现。封装性有助于限制外部对对象的访问,保护对象内部的数据,提高程序的安全性和可维护性。在Java中,可以使用访问修饰符来控制类成员的访问权限,实现不同级别的封装。
如何实现封装?
在Java中,通常使用 private 访问修饰符将类的属性和方法私有化,使用public公开getter 和setter方法来访问和修改属性的值,getter是指获取属性值的方法,setter是指修改属性名的方法。
代码如下(示例):
public class Person {
private String name;
private int age;
//set方法用来修改属性
public void setName(String name){
this.name = name;
}
//get方法用来获取属性
public String getName(){
return this.name;
}
}
public class PersonTest {
public static void main(String[] args) {
Person p = new Person();
//私有属性name不允许修改和访问,使用set和get修改访问
//p.name = "刘备";
p.setName("刘备");
System.out.println(p.getName());
}
}
二、继承性
继承性是Java面向对象编程的另一个重要特性,它允许通过继承父类来创建子类。子类继承了父类的属性和方法,同时可以添加自己的属性和方法,实现代码的重用和扩展。Java支持多重继承,一个类可以继承多个父类的属性和方法。通过使用继承,可以提高代码的复用性和可维护性,减少代码的重复。
代码如下(示例):
public class Animal {
String name;
int age;
public void eat(){
System.out.println(this.name+"在吃东西");
}
}
public class Dog extends Animal {
//子类扩展自身的属性
String color;
String size;
public static void main(String[] args) {
Dog d = new Dog();
//子类继承使用父类的name,age
d.name = "小黑";
d.age = 2;
//子类自身的属性color,size
d.color="黑色";
d.size = "小型犬";
d.eat();
Animal a = new Animal();
}
}
三、多态性
多态性是Java面向对象编程的另一个重要特性,它允许同一个方法在不同对象上表现出不同的形态。多态性通过接口或继承实现,一个对象可以表现为多种形态,可以根据不同的形态来调用相应的方法。多态性的使用可以提高代码的灵活性和可扩展性,使得程序能够更好地适应需求的变化。
多态形成的条件:
1.子类继承父类方法
2.子类重写父类方法
3.父类的引用指向子类的实例:
代码如下(示例):
public class Animal {
void eat(){
System.out.println("动物吃东西");
}
void foo(Animal a){
a.eat();
}
}
public class Cat extends Animal {
@Override
void eat() {
System.out.println("猫吃鱼");
}
}
public class Dog extends Animal{
@Override
void eat() {
System.out.println("狗吃骨头");
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog();
Animal b = new Cat();
a.eat();
b.eat();
/*
代码解释:
Dog和Cat都继承自Animal类,都重写了eat方法,
在编译时a,b都是Animal类型,Animal有eat方法,
所以在编辑器中编译时不会报错.在运行时a是Dog类型,
b是Cat类型,a.eat()执行的是Dog中重写的eat方法,
b执行的是Cat中重写的eat方法.同一个方法在不同类的对象下
执行了不同的操作,这种现象我们称为多态.
*/
/*
多态参数:
方法的形参是父类类型,实参是子类类型
*/
Animal a = new Animal();
a.foo(new Dog());
a.foo(new Cat());
}
}
四、抽象性
抽象性是Java面向对象编程的另一个特性,它通过抽象类和接口来定义抽象方法和变量。抽象类和接口不能直接实例化,必须被继承或实现。子类必须实现这些抽象方法和变量,实现程序的灵活性和可扩展性。抽象性的使用可以简化复杂问题的处理,提高代码的可理解性和可维护性。
抽象类的作用:
抽象类就像是一个模板,定义了一些通用的属性和方法,但是没有具体的实现.可以通过继承抽象类来实现这些方法,从而创建具体的对象
抽象方法的特点:
1.没有方法体;
2.必须在抽象类中定义
抽象类的特点:
1.不能被实例化,只能做父类;
2.继承抽象类的子类必须实现抽象类的所有抽象方法,否则子类也要变为抽象类
3.抽象类可以没有抽象方法,但是抽象方法一定要在抽象类中定义;
代码如下(示例):
public abstract class Animal {
String name;
//抽象方法
abstract void eat();
abstract void drink();
public static void main(String[] args) {
//抽象类不能被实例化
//Animal s = new Animal();
}
}
public class Person extends Animal {
void eat() {}
void drink() {}
}
总结
Java的面向对象特性包括封装性、继承性、多态性和抽象性。这些特性共同构成了Java面向对象编程的基础。通过使用这些特性,可以提高代码的复用性、可维护性和灵活性,使程序更好地适应需求的变化。在设计和实现程序时,合理运用Java的面向对象特性,可以帮助我们更好地解决问题,提高程序的质量和效率