学Java,你了解“类”吗

2021-10-06




Java编程语言是面向对象的,处理的最小的完整单元为对象。而现实生活中具有共同特性的对象的抽象就称之为类。类由类声明和类体构成,类体又由变量和方法构成。


先举个例子看一下类的构成吧。


例1

自定义一个apple类,在主类SetApple中创建实例并调用方法,输出结果如图1所示。源程序代码如下:


//程序文件名为SetApple.java

public class SetApple

{

        public static void main(String[] args)

        {

                apple a=new apple();//创建apple类

                a.appleweigt=0.5;//实例变量赋值

                System.out.println("苹果的重量为1两");

                System.out.println(a.bit());//调用实例方法

                a.appleweight=5;

                System.out.println("苹果的重量为5两");

                System.out.println(a.bit());

        }

}

//自定义类

class apple

      //属性

      long applecolor;//对应苹果的颜色

      double appleweight;//苹果的重量

      boolean eatup;//是否吃完

      //类方法

      public boolean bite()

      {

               if(appleweight<1)

               {

                     System.out.println("苹果已经吃完了!哈哈");

                     eatup=true;

                }

          else

          {

                System.out.println("苹果吃不下了!:(");

                eatup=false;

           }

           return eatup;

        }

    }


图1:自定义类的应用


1、类声明的基本格式

访问说明符class类名extends超类名implements接口名

其中:

(1)访问说明符为public或者缺省。public用来声明该类为有类,可以被别的对象访问。声明为公有的类存储的文件名为类名。


(2)类名:用户自定义的标识符,用来标志这个类的引用。


(3)超类名:是指已经存在的类,可以是用户已经定义的,也可以是系统类。


(4)接口名:即后面讲到的接口。


例如:

public class HelloApplet extends Applet

访问说明符为public,类名HelloApplet,扩展类为JDK包自带的java.applet.Applet类。由于public的存在,所以文件名必须存为HelloApplet.java,同类名保持一致。


2、类体

类体包括成员变量和方法。

(1)成员变量:

指类的一些属性定义,标志类的静态特征,它的基本格式如下:

访问说明符 数据类型 变量名


其中:


  • 访问说明符有public、private和protected三种:

    public:省略时默认为公有类型,可以由外部对象进行访问。

    private:私有类型,只允许在类内部的方法中使用,若从外部访问,必须通过构造函数间接进行。

    protected:受保护类型,子类访问受到限制。


  • 数据类型包括基本类型以及用户自定义的扩展类型。



(2)方法:

昌类的操作定义,标志类的动态特征,它的基本格式如下:


  • 访问说明符 数据类型 方法名(数据类型1 变量名1,数据类型2 变量名2)


    其中:

  • 访问说明符为public、private和protected,其使用方法与成员变量访问说明符的使用方法一致。


  • 数据类型:包括基本数据类型和用户自定义的扩展类型。


  • 数据类型为参数。


3、创建类的实例

使用关键字new进行创建,例如:

HelloApplet hp=new HelloApplet();


例1中,自定义类apple,访问标识符缺省,定义三个属性:

long applecolor;//对应苹果的颜色

double appleweight;//苹果的重量

       boolean eatup;//是否吃完

一个方法为:

       public boolean bite()//类方法{...}

公有类SetApplet中引用自定义类,首先创建类的实例:

       apple a=new apple();

其次赋初值:

       a.appleweight=0.5;//实例变量赋值

最后调用它的方法:

       System.out.println(a.bite());//调用实例方法



类的单继承性


Java编程语言中允许用extends关键字从一个类扩展出一个新类,新类继承超类的成员变量和方法,并可以覆盖方法。


例2:测试类的单继承性,程序输出结果如图2所示。源程序代码如下:


//程序文件名TestExtend.java

public class TestExtend exends Employee

{

        public static void main(String[] args)

        {

             System.out.println("覆盖的方法调用:"+getSalary(王一",500));


    System.out.println("继承的方法调用:"+getSalary2("王一",500));

    System.out.println("覆盖的方法调用:"+getSalary("王飞",10000));

    System.out.println("继承的方法调用:"+getSalary2("王飞",10000));

 }

 public static String getSalary(String name,int salary)

 {

      String str;

      if(salary>5000)

               str="名字:"+name+" Salary:"+salary;

      else

               str="名字:"+name+" Salary:低于5000";

               return str;

     }

     };

     class Employee

     {

     public String name;//名字

     public int salary;//薪水

     public static String getSalary(String name,int salary)

     {

               String str;

               str="名字:"+name+" Salary:"+salary;

               return str;

      }

           public static String getSalary2(String name,int salary)

           {

              String str;

              str="名字:"+name+" Salary:"+salary;

              return str;

            }

      };


程序中定义了父类Employee类,它有两个方法getSalary和getSalary2,方法体的实现都是一致的,都为输出名字和薪水的值。在TextExtend主类中覆盖了getSalsry方法,方法体重新定义为薪水低于5000时并不输出薪水的值而是输出“低于5000”,用于和继承的getSalary2方法进行比较。由图2可以看出覆盖调用父类中的方法。


图2:测试单继承性程序的输出结果




特殊变量

类中有两个特殊变量super和this。

1、super

类声明中用关键字extends扩展了其超类之后,super用在扩展类中引用其超类中的成员变量。


例3:使用super变量,输出结果如图3所示。源程序代码如下:


//程序文件名为UseSuper.java

public class UseSuper 

{

     public static void main(String[] args)

     {

             Manager m=new Manager();

             m.name="王飞";

             m.salary=10000;

             m.department="业务部";

             System.out.println(m.getSalary());

      }

}

class Employee

{

      public String name;//名字

      public int salary;//薪水

      //方法

      public String getSalary()

      {

             String str;

             str="名字:"+name+"\nSalary:"+salary;

   return str;

       }

}

class Manager extends Employee

{

      public String department;//部门

      //方法

      public String getSalary()

      {

         //使用super变量调用超类的方法

         return super.getSalary()+"\nDepartment:"+department;

      }

}


图3:测试super变量输出


2、this

this变量指向当前对象或实例。

str="名字:"+name+"\nSalary:"+salary;

上例中的语句可以换成下面的语句。

str="名字:"+this.name+"\nSalary:"+this.salary;


这两者是等同的,因为在Java编程语言中,系统自动将this关键字与当前对象的变量相关联。但有一种情况例外,就是当在某些完全分离的类中调用一个方法并将当前对象的一个引用作为参数传递时。

例如:

Day d=new Day(this);



构造函数

类中的构造函数用来初始化一个类。构造函数为公有类型,无返回值,用来从类实例中访问类时初始化此类的私有变量。


例4:基于例3将公有变量改成私有变量之后,增加两个构造函数,访问通过外部调用构造函数实惠初始化赋值,得到如图3所示的结果。


//程序文件名为UseConstruct.java

public class UseConstruct

{

    public static void main(String[] args)

    {

    Manager m=new Manager("王飞",10000,"业务部");//初始化赋值

    System.out.println(m.getSalary());

  }

}

class Employee

{

     private String name;//名字

     private int salary;//薪水

     //构造函数

     public Employee(String_name,int_salary)

     {

         name=_name;

         salary=_salary;

     }

     public String getSalary()

     {

         String str;

         str="名字:"+name"\nSalary:"+salary;

         return str;

       }

      }

      class Manager extends Employee

      {

               private String department;


  //构造函数

  public Manager(String_name,int_salary,String_department)

  {

          super(_name,_salary);

          department=_department;

   }

   public String getSalary()

   {

          return super.getSalary()+"\nDepartment:"=department;

   }



计算机操作系统使用文件夹或者目录来存放相关或者同类的文档,在Java编程语言中,提供了一个包的概念来组织相关的类。包在物理上就是一个文件夹,逻辑上代表一个分类概念。


包就是指一组类。例如一个名叫Company的包,可以包含一组类,如Employee(雇员)、Manager(管理者)和Department(部门)等。声明包的基本格式如下:


Package包名;

其中:Package为关键字,包名为标识符。


使用包时的注意事项如下:

1、Package语句要作为程序非注释语句的第一行语句。

2、包内的类名惟一。

3、引用包中的类时,使用import语句。import语句的基本格式为import包名.类名,其中import为关键字,包名和类名之间用圆点(.)隔开。


例5:编写程序测试包,先建立一个Company文件夹,然后建立名为Manager.java的类文件。源程序代码如下:


//程序文件名为Manager.java

package Company;//声明包名Company

class Employee

{

    public String name;//名字

    public int salary;//薪水

    public String getSalary()

    {

    String str;

    str="名字:"+name+"\nSalary:"+salary;

    return str;

  }

}

public class Manager extends Employee

{

    public String department;//部门

    public String getSalary()

    {

       return super.getSalary()+"\nDepartment:"+department;

     }

}


对此文件进行编译,生成文件Manager.class。

在原目录建立源程序文件UsePackage.java。源程序代码如下:

//程序文件名UsePackage.java

import Company.Manager;//引入包中的类

public class UsePackage

{

        public static void main(String[] args)

        {

                Manager m=new Manager();

                m.name="王飞”;

                m.salary+10000;

                m.department="业务部";

                System.out.println(m.getSalary());

        }

}


编译后,在命令提示符状态下运行,输出结果如图4所示。从图4中可以看出首先进入Company目录,编译Manager.java文件,然后返回上层目录,编译UsePackage.java文件,然后返回上层目录,编译UsePackage.java文件,最后执行UsePackage类文件,输出正确的结果。


图4:测试包的输出结果


 有码实训 

有码实训模拟企业真实工作环境,以职业教育+项目实训+团队协作为主。以”项目组“的工作方式实现完整的项目开发过程,在实践中提炼工作经验和项目经验。有码实训主要就是为了帮助从业者走好进入职场的最后一步,真正摆脱”就业难,用人荒“的社会尴尬局面。






听     说!

找到高薪工作的人都关注了这个二维码

点击阅读全文”即可报名实训免费试听课程哦~

相关文章

小白学java系列:前言

2021-10-06
为什么要学习java?java是目前最流行的编程语言,主流公司框架基本上都离不开java的影子,未来还会火很多年.java应用范围极其广...

被唱衰的java真的不行了吗?现在学Java发展如何?

2021-10-06
在编程界,一直会有新语言诞生,也不断有编程语言沉默归零,但是已经有26年历史的Java却在各大编程排行榜上屹立不倒!但是在网...

学Java该有的框架思想

2021-10-06
在我还对Java非常困惑的时候,就有人告诉我,JSP是个好东西,它可以在HTML代码里面写Java代码来完成逻辑.1.7.恭喜你,登录成...

入坑需谨慎!学Java需要具备哪些前提条件?

2021-10-06
很多零基础的学员对于学Java比较迷茫,想通过学Java掌握一技之长,却不知道入门需要具备哪些条件?不知道怎么去学习?下面播妞...

学Java的“黄金5年”,完成从0到年薪50W的晋升!

2021-10-06
分享5点技巧~0基础学Java需要经历哪些阶段?2020年Java的前景还看“涨”吗?课程咨询:后台直接回复:客服,真人在线答疑方便...

学Java最权威、最畅销、口碑最佳的三本书!

2021-10-06
脚本之家你与百万开发者在一起周末时光,给大家推荐学习Java必读书单,都是“充电学习”的必读选项,重要的是有送书活动,一起...

想学 Java 的你,来看看这 20 个实战项目!

2021-10-06
Java 的同学,他们学习最大的困难是需要有人带,靠博客查问题不能及时得到解答,严重影响了学习积极性. 基于此,在这里我向你...

学Java真的没有前途了吗?

2021-10-06
最近有几个小伙伴一直在Java讨论群里抱怨,说现在学Java的人太多了搞得他们一直没找到工作,一个人说该不会是市场已经饱和了吧...

真强啊!建议每一个打算学Java的人都来看看!

2021-10-06
02自己学Java到底难在哪?自己摸索常走弯路:对Java没有宏观的认识,常在已经不流行的知识点上浪费学习时间.没人答疑浪费时间...

学Java,3年成为年薪70W的架构师!需做对3点…

2021-10-06
在知乎上,看到一位蚂蚁金服的Java工程师分享,985硕士,校招就拿到了30w的offer.也有Java程序员分享,自己通过三年的奋斗,...

随机推荐

10种编程语言实现Y组合子

2021-06-02
Python之于Ruby就像Scheme之于Common Lisp.但Python对Lambda的支持简直弱爆了,函数体只允许有一条语句!我决定我的工具...

闲鱼单体应用Serverless化拆分实践

2021-05-13
背景2018,我们在实践中提出了flutter+Dart Faas的云端一体化研发解决方案,该方案借助Serverless 轻(聚焦业务)、快(单个接口...

最新系列课程:jQuery综合实例

2021-05-12
jQuery 实现多种类型的导航条(上)jQuery 制作无缝轮播的焦点图使用 jQuery 实现多种类型的导航条(下)jQuery 中滚动条事件的应用...

今年最值得期待的JavaScript传奇绿皮书登场!

2021-05-03
脚本之家你与百万开发者在一起“能用 JavaScript 实现的东西,迟早会用 JavaScript 实现” 这句“狂妄”的话,如今正在实现着……...

文献解析丨又一篇IF=6.852肿瘤预后纯生信套路文章,巨详细的思路解析,快来复制!

2021-04-25
欢迎扫描加入我们的分学科新社群小编又挖到一个巨好用的肿瘤预后纯生信分析套路,详细的原文解析+思路梳理,保证你看完就懂!...

【Android 原创】L-ctf 2016 两道安卓题浅析

2021-03-28
Toast.makeText(this.a.getApplicationContext(), "Oh no.", 1).show(); }返回到a函数中看到又调用了c类中的a方法,将两个值传...

2021春节论坛活动.

2020-08-31
2021春节论坛活动.到论坛参与http://bbs.t.imop.com/viewthread.php?tid=6936511&extra=page%3D1

【免费毕设】JAVA物业管理系统设计与实现(论文+源代码)

2018-12-28
ResultSet rs=stmt.executeQuery(input); System.out.println(zc.face.MySqlUnit.printMetaData(rs)); System.out.println(zc.face.MySqlUnit....

重磅!挑战Oracle,华为将开源 GaussDB 数据库

2017-06-14
来源:中关村在线,https://dwz.cn/nHNSOTeN有消息称在正在进行的鲲鹏计算产业论坛上,华为宣布将开源其GaussDB数据库....

田馥甄丨一种音乐的魔力

2016-05-22
无论是轻锁眉头的《囚鸟》还是勾人魂魄的《痒》......她的歌声,... 她就是田馥甄田馥甄(Hebe),中国台湾女歌手、演员,是华语...