Java中的面向对象

我们生活在对象的世界中,一切皆是对象!

类的定义


(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,否则在其子类中只是新定义了一个方法,并没有对其进行重写
    • 静态方法不能被重写为非静态的方法(会编译出错)
  • 重载的规则

    • 在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样)
    • 不能通过访问权限、返回类型、抛出的异常进行重载
    • 方法的异常类型和数目不会对重载造成影响

面向对象的思想

就拿我们制作一个盒子来说:

  • 面向过程:不去想做什么样的盒子,随机取工具制造;
  • 面向对象:先想好做一个什么样的盒子,再去拿相应的工具去做;

三大特征:

  • 封装性:对外部不可见
  • 继承性:扩展类的功能
  • 多态性:方法的重载;对象的多态性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值