java作为一门面向对象的语言,实现了面向对象的以下这些概念:
- 多态
- 继承
- 封装
- 抽象
- 类
- 对象
- 实例
- 方法
- 重载
类和对象
类是对对象的抽象(可以认为是生成类的模板),而对象是类的实例,对象拥有类的公共属性和方法,同时也可以对这些属性和方法进行重写和重载,这不仅仅在java中是这样的概念,在JavaScript等面向对象的编程语言中都大同小异。
现在创造一个简单的类:
public class ClassTest {
String breed;
int size;
String colour;
int age;
void eat() {
}
void run() {
}
void sleep() {
}
void name() {
}
public static void main(String[] args) {
}
}
一个类可以包含以下类型变量:
-
局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
-
成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
-
类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。
一个类可以拥有多个方法,在上面的例子中:eat()、run()、sleep() 和 name() 都是 Dog 类的方法。
构造方法
每个类都有构造方法。如果代码中没有显式定义类的构造方法。java编译器将会为该类提供默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须和类同名,一个类可以有多个构造方法。
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 这个构造器仅有一个参数:name
}
}
创建对象
对象是根据类创建的(这个过程叫做类的实例化),在java中,同样使用new关键字来创建对象,对象的创建需要以下三个步骤:
- 声明 声明一个对象,包括对象的名称和类型。
- 实例化 使用new关键字来实例化创建对象。
- 初始化 使用new关键字创建对象时,会调用构造方法初始化对象。
例子:
public class Dog {
String name;
public Dog(String name) {
this.name = name;
System.out.println("name is: " + name); // name is: Kokki
}
void sayName() {
System.out.println(this.name);
}
public static void main(String[] args) {
Dog myDog = new Dog("Kokki");
myDog.sayName(); // Kokki
}
}
添加类的方法
在上面的例子中继续添加方法:
public class Dog {
String name;
int age;
String category = "Kokki";
static String gender = "male";
public Dog(String name) {
this.name = name;
System.out.println("name is: " + name); // name is: Kokki
}
void sayName() {
System.out.println(this.name);
}
void sayAge() {
System.out.println("age is: " + age);
}
void setAge(int ageArg) {
age = ageArg;
}
public static void main(String[] args) {
Dog myDog = new Dog("Kokki");
myDog.sayName(); // Kokki
myDog.sayAge(); // age is: 0
myDog.setAge(10);
myDog.sayAge(); // age is: 10
System.out.println(myDog.category);
// 测试静态关键字 static是否和ts里面的类似
System.out.println(Dog.gender);
}
}
源文件声明规则
- 一个源文件中只能有一个public类
- 一个源文件可以有多个非public类
- 源文件的名称应该和public类的类名保持一致
- 如果一个类定义在某个包中,那么package语句应该在源文件首行
- 如果源文件包含import语句,那么应该在package语句和类定义之间。如果没有包含package语句,那么import语句应该在源文件中最前面。
- import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
类有若干种访问级别,并且类也分不同的类型:抽象类和final类等。