【Java梳理】面对对象,类和接口

面对对象编程是用程序对客观事物的抽象表达。先来看一个简单的例子,新建一个类Human:

package helloworld;
import java.util.Random;
/**
 * 人类
 */
public class Human {
    //静态常量
    public static final int BABY_AGE = 1;

    //以下为类变量
    private Integer age;
    private String sex; //先生 or 女士
    private String name; //名
    private String surname;  //姓

    //默认构造函数,如果不添加其他构造函数,系统会自己创建默认构造函数(父类没有默认构造函数除外)
    public Human(){}

    //构造函数
    public Human(int age, String sex, String name, String surname){
        this.age = age;
        this.sex = sex;
        this.name = name;
        this.surname = surname;
    }

    /**
     * 实例方法,只有在类实例化后才能调用此方法
     */
    public void talk(){
        System.out.println(surname + name + sex + "在说话");
    }

    public void walk(){
        System.out.println(surname + name + sex + "在走路");
    }

    /**
     * 静态方法,必须使用 类名.方法名 的方式调用,而不是类的实例调用
     * @param man
     * @param woman
     * @return
     */
    public static Human newHuman(Human man, Human woman) {
        if (man.sex.equals(woman.sex)){
            System.out.println("can not get a new human");
            return null;
        }else {
            Random random = new Random();
            String sex = random.nextInt(2) == 0 ? woman.sex : man.sex;  //nextInt 结果不包含上限参数bounds, [0-bounds)的整数.
            return new Human(BABY_AGE, sex, man.name, woman.surname);
        }
    }
}

然后在程序的main方法中加入:

        Human man = new Human(25, "先生", "三", "张");  // 使用new 关键字创建一个对象(实例)
        Human woman = new Human(25, "女士", "四", "李");

        man.talk();    //调用类的实例方法
        woman.talk();
        Human human = Human.newHuman(man, woman);   //调用静态方法
        human.talk();
        human.walk();

点击运行,查看结果。

虚拟类是一种特殊的类,被abstract关键字修饰。和非abstract不同的是,虚拟类不能创建实例。虚拟类可以将一些必须要子类实现而自己不想实现的方法标记为 abstract,所以abstract方法不能被private修饰。下面的例子:

public abstract class Animal {
    public abstract void move();  //虚方法
}

接口使用interface关键字声明。接口和类不同的是,接口只能声明行为(方法)而不能有方法的实现(注意从Java8开始,接口可以编写默认方法).此外接口是可以编写静态方法和静态变量的。接口中所有的方法都是public的,变量默认是static且必须初始化。

public interface Dog {
    int FOOTS_NUM = 4;   //public static final

    void bark(); //接口方法,注意所有的这类接口方法子类必须实现

    static void staticMethod(){
        System.out.print("static method");
    }

    default void run(){
        System.out.print("默认方法,从Java8开始的特性");
    }
}

Object类是所有Java类的基类,所有的类都继承自Java.lang.Object。

这一节讲述了类的内部细节,以及类的相关使用方法,下一节说说面向对象的高级特性。

你可能感兴趣的:(【Java梳理】面对对象,类和接口)