java面向对象程序

java面向对象程序

一、相关知识学习

  Java是一种面向对象的程序设计语言。面向对象程序设计(Object Oriented Programming,简写为OOP)的基本思想是:对软件系统要模拟的客观实体以接近人类思维的方法进行自然分割,然后对客观实体进行结构模拟和功能模拟,从而使设计出来的软件尽可能直接地描述客观实体,从而构造模块化的、可重用的、维护方便的软件。

1、类和对象

  类(class):是对一组相似客观实体的抽象描述,类是抽象的概念,不占用实际空间。任何类都具有名字、属性、方法。
  名字:例如:人类
  属性:例如:人类的性别、身高、皮肤颜色等。
  方法:例如:人类的说话、行走等动作。
  对象(Object):是抽象描述的类的一个具体的实例(俗称为物体)。此实例物理存在,占用物理空间。
类声明的语法格式如下:

[<public>|<abstract|final>] class 类名 [extends <父类名>] [implements <接口名的列表>] 
{
  类主体 
}

其中:public、abstract、final、extends、implements等关键词等为可选项。
一个最简易的类声明的语法如下:

class 类名
{
  类主体 
}

类的主体中包含有类的属性(类成员变量)和方法(类成员函数)。
声明类成员属性的格式为:

[<public>|<private>|<protected>][static][final][transient] <变量类型> <变量名>;

其中:public、private、protected、static、final、transient等关键词等为可选项。
声明类成员方法(函数):

[<public>|<private>|<protected>][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);
}
2、类与继承

  继承(或称为派生)就是一个新类(子类)拥有全部被继承类(父类)的属性和方法。继承机制使得新类不仅有自己特有的属性和方法,而且还有父类的全部属性和方法。Java中所有类都是从Object类继承而来,Object类是所有类的父类。Java只支持单继承(即最多只能从一个父类进行继承),还不能直接支持多继承,但Java可以使用接口的方式在实际上实现多继承的功能。
明确指定继承的类声明的语法格式:

[<public>|<abstract|final>] class 子类名 extends 父类名 [implements <接口名列表>] 
{
   类主体
} 

继承时的原则:

  • 子类可以继承父类中声明为public和protected的属性和方法,但不能继承父类的构造方法。
  • 子类不能继承父类中声明为private和默认的属性和方法。
  • 如果子类中定义了一个与父类中名字相同的属性或方法,则子类不再能继承这个同名的属性或方法,而是使用子类中自己所定义的。

this引用和super引用:
this引用可以明确地访问类自身定义的属性和方法。

this.属性名                 //明确访问类自身定义的属性
this.方法名(参数列表)       //明确访问类自身定义的方法

super引用可以明确地访问父类所定义的属性和方法。

super.属性名                 //明确访问父类定义的属性
super.方法名(参数列表)       //明确访问父类定义的方法
3、接口

  Java使用接口来完成多继承的功能。
  Java规定:一个子类最多只能从一个父类直接继承,但是允许一个子类可以同时实现(也可以说是继承)多个接口。
接口的定义语法格式是:

[<public>] interface <接口名>
{
属性名1=<初值1>;
//定义其他属性......
[<public>|<protected>]<返回值类型><方法名>();
//定义其他方法......
} 

接口的实现:在类中实现

[<public>[<final>]] class 类名 [extends <父类名>] implements 接口名1,接口名2,......,接口名n,
{ 
   //实现各个接口中所定义的全部方法
   //类主体的其他属性和方法 
} 

二、训练

1、任务要求:
  • 完成一个java application 应用程序,描述一个人类。要求如下:
  • 要求此人类必须包含有人的姓名、性别、出生日期等基本属性(变量)。
  • 要求此人类描述吃饭的方法(函数)和描述睡觉的方法(函数)。例如睡觉方法的执行体为一个 System.out.println() 函数,此函数输出一段例如“ xx(姓名)往床上躺倒,不久就睡着了……”之类的描述睡觉的文本。
  • 要求此人类的构造函数要具有无参数的构造函数,以及带有姓名、性别、出生日期等参数的构造函数,并在构造函数中输出一段描述xx(姓名)出生的文本。
  • 实例化出张三和李四两个人类对象(变量),并为之赋初值。
  • 调用张三、李四等人类对象的各种属性(类成员变量)和方法(函数)。
  • 在上述人类的基础上派生一个继承自人类的新的学生类,加入学号等学生特有的属性,加入上课、考试等方法,并实例化一个或几个学生类对象,完成这些学生类对象的各种属性和方法的调用。
2、java程序:
test.java
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()方法
	}
}
继承自人类的新的学生类 student.java
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");
	  }
}
3、实现的效果图:

在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值