面对对象编程是用程序对客观事物的抽象表达。先来看一个简单的例子,新建一个类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。
这一节讲述了类的内部细节,以及类的相关使用方法,下一节说说面向对象的高级特性。
网友评论