我们生活在对象的世界中,一切皆是对象!
类的定义
(1)Java编程语言是面向对象的,处理的最小的完整单元为对象,而现实生活中具有共同特性的对象的抽象就称之为类。类由类声明和类体构成,类体又由变量和方法构成。
类是创建对象的模版,对象是类的实例。
(2)类声明的基本格式:
访问说明符 class 类名 extends 超类名 implements 接口名
其中:
- 访问说明符为public或者缺省。public用来声明该类为公有类,可以被别的对象访问。声明为公有的类存储的文件名为类名
- 类名:用户自定义的标识符,用来标志这个类的引用
- 超类名:是指已经存在的类,可以是用户已经定义的,也可以是系统类
- 接口名:即接口。
(3)类体包括成员变量和方法
成员变量:指类的一些属性定义,标志类的静态特征,它的基本格式如下:访问说明符 数据类型 变量名
,其中访问说明符有public、private和protected三种:
-
public:省略时默认为公有类型,可以由外部对象进行访问
-
private:私有类型,只允许在类内部的方法中使用,若从外部访问,必须通过构造函数间接进行
-
protected:受保护类型,子类访问受到限制
-
数据类型包括基本类型以及用户自定义的扩展类型。
方法:是类的操作定义,标志类的动态特征,它的基本格式:
访问说明符 数据类型 方法名(数据类型1 变量名1, 数据类型2 变量名2)
其中:
- 访问说明符为public、private和protected,其使用方法与成员变量访问说明符的使用方法一致
- 数据类型:包括基本数据类型和用户自定义的扩展类型
- 数据类型为参数。
下面我们以一个简单的例子来具体看一下:
/**
* 类的学习
* @author daoyuan
*
*/
class Dog extends animals implements Animal{
private int price; //价格
public String people; //主人名字
public String like; //爱好
//....其他属性
//构造方法
public void Dog(){
}
//get/set方法
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getPeople() {
return people;
}
public void setPeople(String people) {
this.people = people;
}
public String getLike() {
return like;
}
public void setLike(String like) {
this.like = like;
}
//重写接口的方法
@Override
public void eat() {
// TODO Auto-generated method stub
}
@Override
public void play() {
// TODO Auto-generated method stub
}
//自己的方法
public void playDish(){
System.out.println("I like play!");
}
//...其他的自定义方法
}
//父类
class animals{
private int id;
public String name;
public String data;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
//接口
interface Animal{
public void eat();
public void play();
}
public class demo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//利用new关键字实例化一个对象
Dog wang = new Dog();
wang.setId(01);
wang.setData("2001/01/01");
wang.setLike("eat");
wang.setName("big huang");
wang.setPrice(200);
System.out.println("编号为"+wang.getId()+"的"+wang.getName()+"的出生日期是:"+wang.getData()+
"售价是:"+wang.getPrice()+"爱好是:"+wang.getLike());
}
}
通过这个简单的例子我们对于类的格式就有了一个基本的认识。
类的单继承性
Java编程语言中允许用extends关键字从一个类扩展出一个新类,新类继承超类的成员变量和方法,并可以覆盖方法。
-
重载和重写的区别
- override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写(重新实现)父类中的方法。
-
重写(覆盖)的规则
- 重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载
- 重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
- 重写的方法的返回值必须和被重写的方法的返回一致
- 重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类
- 被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写
- 静态方法不能被重写为非静态的方法(会编译出错)
-
重载的规则:
- 在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样)
- 不能通过访问权限、返回类型、抛出的异常进行重载
- 方法的异常类型和数目不会对重载造成影响
面向对象的思想
就拿我们制作一个盒子来说:
- 面向过程:不去想做什么样的盒子,随机取工具制造;
- 面向对象:先想好做一个什么样的盒子,再去拿相应的工具去做;
三大特征:
- 封装性:对外部不可见
- 继承性:扩展类的功能
- 多态性:方法的重载;对象的多态性