Java面向对象的几个特征分别为:封装,继承,抽象,多态。

1封装:

把对象的全部属性和全部服务结合在一起,形成不可分割的独立的单位(对象);信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界〔或者说形成一道屏障〕,只保留有限的对外接口使之与外部发生联系。

封装的优点:使对象以外的部分不能随意存取对象内部的数据,有效避免交叉感染,使软件错误局部化,减少查错和排错的难度。

2 继承:

  使用一个特殊类拥有其全部的属性和服务,作为父类,他可以有多个子类,一般的类去实现,比如:父类为 人,子类可以是 男人和女人,男和女都继承于父类,但是一个子类只能继承一个特殊类,不能继承多个。但一个一般类可以实现多个接口。子类继承父类的时候,可以重写父类的方法,也可以有自己的方法。

3 抽象:

Java中抽象可以是抽象类、抽象方法,使用abstract修饰。其中抽象类中可以有抽象方法和非抽象方法,抽象方法。据有抽象方法的类一定是抽象类。抽象方法一般只有方法名,没有方法的实现。如:public abstract void test(); 且抽象方法的权限修饰必须是protected public 的,因为子类在继承抽象父类的时候,必须要实现父类所有的抽象方法。

4 多态:

具有三个条件:1)继承 2)重写 3)父类对象引用指向子类对象

多态优点:

1.可替换性(substitutability)。多态对已存在代码具有可替换性。 
2.可扩充性(extensibility)。多态对代码具有可扩充性。 
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。 
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。 
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程。

以下为一个以上特征的例子:

package com.shxt.test.three;


 public class TestAbstract {
 public static void main(String[] args) {
 //多态
 Person p = new Man();
 //抽象类调用先看子类中有没有重写父类中的方法,如果没有直接调用父类的方法
 p.setName("asdfasd");
 //为子类中重写的父类方法
 p.walk();
 System.out.println(p.getName() + " " + p.getClass());
 //多态
 Person p1 = new Man();

 p1.test1();


 }
 }


 abstract class Person {
 public String name;
 public int id;
 static int i;


 public String getName() {
 return name;
 }


 public void setName(String name) {
 System.out.println("父类");
 this.name = name;
 }


 public int getId() {
 return id;
 }


 public void setId(int id) {
 this.id = id;
 }


 public abstract void walk();
 public static void test1() {
 // int i=0;
 i = 1;
 System.out.println(i);
 System.out.println("我是父类中方法...");
 }
 }


 class Man extends Person {
 static int i;
     public String name;
    
 @Override
 public void walk() {
 System.out.println("man walk");


 }


 public void test() {
 System.out.println("test");
 }


 public static void test1() {
 // int i=0;
 i = 1;
 System.out.println(i);
 System.out.println("我是子类中方法...");
 }

 }