Java是一种面向对象的程序设计语言。面向对象程序设计(Object Oriented Programming,简写为OOP)的基本思想是:对软件系统要模拟的客观实体以接近人类思维的方法进行自然分割,然后对客观实体进行结构模拟和功能模拟,从而使设计出来的软件尽可能直接地描述客观实体,从而构造模块化的、可重用的、维护方便的软件。
类(class):是对一组相似客观实体的抽象描述,类是抽象的概念,不占用实际空间。任何类都具有名字、属性、方法。
名字:例如:人类
属性:例如:人类的性别、身高、皮肤颜色等。
方法:例如:人类的说话、行走等动作。
对象(Object):是抽象描述的类的一个具体的实例(俗称为物体)。此实例物理存在,占用物理空间。
类声明的语法格式如下:
[|] class 类名 [extends <父类名>] [implements <接口名的列表>]
{
类主体
}
其中:public、abstract、final、extends、implements等关键词等为可选项。
一个最简易的类声明的语法如下:
class 类名
{
类主体
}
类的主体中包含有类的属性(类成员变量)和方法(类成员函数)。
声明类成员属性的格式为:
[||][static][final][transient] <变量类型> <变量名>;
其中:public、private、protected、static、final、transient等关键词等为可选项。
声明类成员方法(函数):
[||][static] <返回值类型> <方法名>([参数类型 参数变量1,参数类型 参数变量2,......,参数类型 参数变量n]);
{
方法体
}
类的构造方法:
类的构造方法:其方法名与类名完全相同,专门用于类的实例对象初始化。
这个类的构造方法总是自动存在的,而且默认为public(公共)方法并且不带返回类型。在使用new运算符对一个类的对象进行实例化时,该类的构造方法被自动调用。
特别注意:类的构造方法不能带返回值类型,否则将不再充当构造方法!
对象的创建和初始化:
定义了类之后,必须实例化成为对象后才能使用。
定义对象的语法为:
类名 对象名;
实例化此对象的语法为:
对象名=new 类名(参数列表);
特殊地,String 类的对象无需使用new运算符来实例化,而是可以直接使用赋值语句=来实例化。
对象的使用:
一旦创建并实例化一个对象之后,就可以使用此对象。
引用一个对象中的属性其表达式格式为:
对象名.属性名
引用一个对象中方法其表达式为:
对象名.方法名([<参数列表>])
类方法的重写:
方法重写:是指同一个方法名,多个不同参数形式的方法。
例如:
public void show()//定义方法show
{
System.out.println("输入的值为空");
}
public void show(int i)//重写方法show
{
System.out.println("输入的值为"+i);
}
继承(或称为派生)就是一个新类(子类)拥有全部被继承类(父类)的属性和方法。继承机制使得新类不仅有自己特有的属性和方法,而且还有父类的全部属性和方法。Java中所有类都是从Object类继承而来,Object类是所有类的父类。Java只支持单继承(即最多只能从一个父类进行继承),还不能直接支持多继承,但Java可以使用接口的方式在实际上实现多继承的功能。
明确指定继承的类声明的语法格式:
[|] class 子类名 extends 父类名 [implements <接口名列表>]
{
类主体
}
继承时的原则:
this引用和super引用:
this引用可以明确地访问类自身定义的属性和方法。
this.属性名 //明确访问类自身定义的属性
this.方法名(参数列表) //明确访问类自身定义的方法
super引用可以明确地访问父类所定义的属性和方法。
super.属性名 //明确访问父类定义的属性
super.方法名(参数列表) //明确访问父类定义的方法
Java使用接口来完成多继承的功能。
Java规定:一个子类最多只能从一个父类直接继承,但是允许一个子类可以同时实现(也可以说是继承)多个接口。
接口的定义语法格式是:
[] interface <接口名>
{
属性名1=<初值1>;
//定义其他属性......
[|]<返回值类型><方法名>();
//定义其他方法......
}
接口的实现:在类中实现
[[]] class 类名 [extends <父类名>] implements 接口名1,接口名2,......,接口名n,
{
//实现各个接口中所定义的全部方法
//类主体的其他属性和方法
}
class person
{
String name; //定义属性:姓名,是一个String类的对象
String sex; //定义属性:性别,是一个String类的对象
int date; //定义属性:出生日期,是一个int类的对象
public person () //自定义类无参的构造方法
{
}
public person (String x,String y,int z) //自定义类有参的构造方法
{
this.name=x; //this关键字指明此变量name是该类本身所定义的类属性变量
this.sex=y;
this.date=z;
System.out.println("我叫"+x+" 我出生日期为:"+z);
}
public void eat() //定义类的吃饭一个方法,此方法无返回值
{
System.out.println(name+"正在吃饭!");
}
public void sleep() //定义类的睡觉一个方法,此方法无返回值
{
System.out.println(name+"往床上躺倒,不久就睡着了!");
}
}
public class test
{
public static void main(String[] args)
{
person a=new person("张三","男",20180902); //定义一个person类的对象a并实例化
a.eat(); //引用对象a的eat()方法
a.sleep(); //引用对象a的sleep()方法
person b=new person("李四","女",20120719); //定义一个person类的对象b并实例化
b.eat(); //引用对象b的eat()方法
b.sleep(); //引用对象b的sleep()方法
}
}
public class student extends person
{
String studentid;//定义student特有的属性:学号,是一个String类的对象
public void inclass(String studentid) //定义类的上课一个方法,此方法无返回值
{
System.out.println("学号为"+studentid+"学生正在上课");
}
public void exam(String studentid) //定义类的上课一个方法,此方法无返回值
{
System.out.println("学号为"+studentid+"学生正在参加考试");
}
public static void main(String args[])
{
student i=new student(); //实例化 student 类对象i
i.inclass("20182104021");
i.exam("20182104021");
}
}