【JAVA】面向对象程序—描述对象

前言介绍
  • 为方便今后的学习和撰写,从今日起,本人开始先以JAVA作为首要学习探讨路线来写作,希望大家能够相互指正。
  • 本篇主要从面向对象开始讲解,前面的编译环境、程序调试、基本语法基础请参考前文。
  • 要想对现实世界的对象进行建模操作,我们就要弄清楚事物的属性与行为,所以,接下来我们便开始面向对象的学习。

面向对象的概述

像我们学习的C语言,就是一种面向过程的语言,而类似C++、JAVA的就是面向对象的语言。面向过程和面向对象都是对软件分析、设计和开发的一种思想,指导人们去分析、设计和开发软件。

面向过程的思想注重按照步骤实现,并对应成方法,一步一步最终完成。

面向过程适合比较简单的任务和不需要协作的任务,但当我们思考比较复杂的任务的时候就不够用了,所以我们就需要引入面向对象的思想。

对象与类

对象是事物存在的实体,通常将其分为静态部分和动态部分。而类实质上就是封装对象属性和行为的载体,对象是人类抽象出来的,反过来说具有相同属性和行为的一类实体被称为类。
1

设计特点

面向对象程序设计的三大特征:

  1. 封装性;
  2. 继承性;
  3. 多态性;

类的定义

类的定义方式

  • 简例:
public class Car{
//每一个源文件有且仅有一个public class,并且类名与文件名保持一致
}
class Tyre{
//一个Java文件可以同时定义多个class
}
class Engine{
}
class Seat{
}
class Window{
}

上述的类定义好了之后是没有任何其他信息的,一般来说类有三种常见的成员:属性field、方法method、构造器constructer,这些成员皆可以定义0个或多个。

  • 简单学生类编写:
public class Student{
 //属性(成员变量)
  int id;
  String name;
  int age;
  //方法
  void study(){
  	System.out.println("好好学习专业知识!");
  }
  //构造方法
  Student(){	
  }
}

以上是一个思想,可以根据类的模板去创建相应的对象。

成员变量(属性field)

属性是用来定义该类对象包含的数据或者说是静态变量,作用范围覆盖整个类体。

  • 属性定义格式:
【修饰符】属性类型 属性名 =【默认值】;

权限修饰符

JAVA中的权限修饰符主要包括private、public和protected,控制着对类和类的成员变量以及成员方法的访问。
其修饰符的修饰权限见下表:
4

方法(method)

方法用于定义该类或类实例行为特征和功能的实现。类似于面向过程中的函数,整个程序由一个个函数调用组成的,方法从属于类和对象。

  • 方法定义格式:
【权限修饰符】 方法返回值类型 方法名(参数类型 参数名){
...... //方法体
return 返回值;
}
  • 学生(电脑学习)类程序完善:
public class WTCLABstudent{
 //属性(fields)
  int id;
  String name;
  int age;

  Computer comp;//调用计算机

  //方法
  void study(){           //定义study方法  
    System.out.println("白天在实验室学习!使用电脑:"+comp.brand);
  }
  void rest(){            //定义无参数的rest方法 
    System.out.println("我每天早睡早起!");
  }
  //构造方法。用于创建类的对象,无参的构造方法可以由系统自动创建。
  WTCLABstudent(){
  }
  //程序执行的入口,必须要有
  public static void main(String[] args){
    WTCLABstudent stu =new WTCLABstudent();//创建一个WTCLABstudent对象
    stu.id=630;                                        //给对象的公有字段直接赋值 
    stu.name="王昭";                             //给对象的公有字段直接赋值 
    stu.age=22;                                       //给对象的公有字段直接赋值 

    Computer c1 = new Computer();     //调用类的无参构造函数
    c1.brand ="联想";                            //定义有参study方法的参数  
    stu.comp=c1;                                

    stu.rest();                                 //调用对象的无参方法
    stu.study();                             //调用对象的无参方法
  }
}
class Computer{
  String brand;                          //电脑品牌
}

  • 结果:
    3
    在成员方法中定义一个变量,这个变量被称为局部变量。如上面的int id。局部变量使用时必须进行赋值操作或者被初始化,它的有效范围从该变量的声明到该变量的结束为止。

工程训练

任务要求:
  • 完成一个java application 应用程序,描述一个人。要求如下:
  • 要求此人类必须包含有人的姓名、性别、出生日期等基本属性(变量)
  • 要求此人类描述吃饭的方法(函数)和描述睡觉的方法(函数)。例如睡觉方法的执行体为一个 System.out.println() 函数,此函数输出一段例如“ xx(姓名)往床上躺倒,不久就睡着了……”之类的描述睡觉的文本。
  • 要求此人类的构造函数要具有无参数的构造函数,以及带有姓名、性别、出生日期等参数的构造函数,并在构造函数中输出一段描述xx(姓名)出生的文本。
  • 实例化出张三和李四两个人类对象(变量),并为之赋初值。
  • 调用张三、李四等人类对象的各种属性(类成员变量)和方法(函数)
  • 在上述人类的基础上派生一个继承自人类的新的学生类,加入学号等学生特有的属性,加入上课、考试等方法,并实例化一个或几个学生类对象,完成这些学生类对象的各种属性和方法的调用。
  • 以上定义中,各种类的属性、方法等鼓励标新立异,尽量达到可以描述真实的人类和学生等。
实现代码:
class Humanity                   //创建Humanity对象                
{  
    public String name;         //声明公有字段name,此时name为类的属性,下面通过公有方法进行访问  
    public String sex;          //声明性别变量sex
    public int age;             //声明公共字段age 
    public int id;              //声明人物学号变量 
    public String birth;        //声明人物生日变量 
    public String getName()     //返回对象的信息描述
    {  
        return name;  
    }  
    public void setName(String name) {  //设置名称
        this.name = name;  
    }  
    
    public void eat()           //定义无参数的eat方法  
    {  
    	System.out.println("他是个纯南方人,特别爱吃米饭");  
	}  
	public void eat(String s)   //定义带参数的eat方法,实现方法重载  
	{  
		System.out.println("他是一个地道的北方人,非常喜欢吃"+s);  
	} 

    public void sleep() {       //定义无参数的sleep方法
        System.out.println("张三偶尔熬夜,晚上思考能力很发达,所以睡眠时间不太好。");
    }
    public void sleep(String t) {     //定义带参数的sleep方法,实现方法重载
        System.out.println("李四有良好的休息习惯,只要往"+t+"躺倒,不久就会睡着了……");
    }
	
    public void study()           //定义无参数的study方法  
    {  
        System.out.println("他要求学生每天好好学习,按时上课");  
    }  
    public void study(String r)   //定义带参数的study方法,实现方法重载  
    {  
        System.out.println("还建议学生在空闲时间多看"+r);  
    } 

    public void exam()           //定义无参数的exam方法  
    {  
        System.out.println("无论任何考试,都要做一个诚信的人!");  
    }  
    public void exam(String q)   //定义带参数的exam方法,实现方法重载  
    {  
        System.out.println("考试检测方面,不允许使用"+q+"作弊");  
    } 

	public Humanity()            //定义无参构造函数,注意无返回值定义,方法与类同名  
	{  
	}  
	public Humanity(int age,int id,String sex,String name,String birth) 
	{                        //重写一个带参数构造函数,注意无返回值定义,方法与类同名  
	this.age = age;          //前一个age为对象的字段,由this指定,后一个age为函数形参  
    this.id = id;            //前一个id为对象的字段,由this指定,后一个age为函数形参  
	this.sex = sex;          //前一个sex为对象的字段,由this指定,后一个age为函数形参  
    this.name = name;        //前一个name为对象的属性,由this指定,因为在本类中可直接访问,后一个name为函数形参  
    this.birth = birth;      //前一个birth为对象的字段,由this指定,后一个birth为函数形参
	}  
    //public Humanity(int age,int id,String sex,String name)            //定义无参构造函数,注意无返回值定义,方法与类同名  
    //{  
    //this.age = age;          //前一个age为对象的字段,由this指定,后一个age为函数形参  
    //this.id = id;      
    //this.sex = sex;   
    //this.name = name;  
    //}          
}  
public class Example1 
{  
    public static void main(String[] args)  //主方法调用
    {  
	Humanity Humanity1 = new Humanity();  //调用类的无参构造函数  
    Humanity1.age = 22;                   //给对象的公有字段直接赋值 
    Humanity1.id =201801234;              //给对象的公有字段直接赋值  
    Humanity1.setName("张三");           //给对象的公有字段直接赋值 
    Humanity1.sex = "男" ;             //给对象的公有字段直接赋值 
    Humanity1.birth = "1996年5月8日" ; //必须使用公共方法才能给对象的属性赋值  
    System.out.println("从前有个"+Humanity1.sex+"生叫"+Humanity1.getName()+",他出生于"+ Humanity1.birth+",今年"+Humanity1.age+ "岁,学号是"+Humanity1.id);  
    Humanity1.eat();                   //调用对象的无参方法  
    Humanity1.sleep();                 //调用对象的无参方法 
    System.out.println("\n");                   //空行
   
    Humanity Humanity2 = new Humanity(23,201804321,"男","李四","1995年6月9日");//调用类的有参构造函数  
    System.out.println("他有个"+Humanity2.sex+"同学叫" + Humanity2.getName() + ",学号为"+Humanity2.id + ",今年" + Humanity2.age+ "岁了,生日是"+Humanity2.birth);  
    Humanity2.eat("馒头");           //调用对象的有参方法  
    Humanity2.sleep("床上");         //调用对象的有参方法  
    System.out.println("\n");        //空行

    Humanity Humanity3 = new Humanity();//(35,200906789,"男","杜"); 
    Humanity3.age = 35;                 //给对象的公有字段直接赋值  
    Humanity3.id =200906789;            //给对象的公有字段直接赋值  
    Humanity3.setName("杜");            //给对象的公有字段直接赋值
    Humanity3.sex = "男" ;              //给对象的公有字段直接赋值  
    System.out.println("他俩有一位"+Humanity3.sex+"导师,叫"+Humanity3.getName()+"老师,学工号:"+ Humanity3.id);
    //System.out.println(Humanity3.getName());
    Humanity3.study();                //调用对象的无参方法  
    Humanity3.study("科技类文章");    //调用对象的有参方法  
    Humanity3.exam("通讯设备");       //调用对象的有参方法  
    Humanity3.exam();                //调用对象的无参方法  
    //System.out.println();
    }  
}  
效果:

5


在这里我也说说自己的想法吧,有时候写博客或者说学习,我本人是个学习时会专注,打断后就会短片的那种人。但是我觉得每个人的兴趣非常重要,它有时候会改变你,会成就你。
有的时候写东西,我会慢慢想着发展一下,真的好有意思,很开心,写一篇博客没写完就不舍得发。也希望大家多多讨论思考,大家一起学习一起“玩”。
后续将会继续更新有关java的学习博客,希望大家共同学习共同指正,兴趣是最好的老师!


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值