zoukankan      html  css  js  c++  java
  • java面向对象编程(一)-类与对象

    1.问题的提出
         张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫。

    //用前面学习过的知识写出代码如下:

    public class Demo107{
        public static void main(String []args){
            int a=49;//输入的名字49,50
            int cat1age=3; //第一只猫
            String cat1name="小白";
            String cat1color="白色";
            int cat2age=100; //第二只猫
            String cat2name="小花";
            String cat2color="花色";
            switch(a){
            case '1':
                System.out.println(cat1age+cat1color);
                break;
            case '2':
                System.out.println(cat2age+cat2color);
                break;
            default:
                System.out.println("张老太没有这只猫!");
            }
         }
        }

    //用面向对象思想解决,代码如下:

    //主函数
       public class Demo105{
          public static void main(String []args){
            //创建一个猫对象
            Cat cat1=new Cat();//Cat是定义的一个数据类型
            //cat1=new Cat(); 等同于 Cat cat1=new Cat();
            //访问属性的 对象名.属性名字
            cat1.age=3;
            cat1.name="小白";
            cat1.color="白色";
    
            //创建第二只猫
            Cat cat2=new Cat();
            cat2.age=100;
            cat2.name="小花";
            cat2.color="花色";  
        }
        }
       //java中[类名的首写字母大写]可根据程序的需要定义类
       //定义猫类
       class Cat{
             //下面的就是类的成员变量/属性
        int agr;
        String name;
        String color;
        Master myMaster;
       }
      //引用类型,比如建个主人类 
      class Master{
        int age;
        String name;
        String address;
      }

    说明:对比看来,传统方法显然很麻烦,需要定义很多变量,且变量之间没有内在的联系。因此,使用面向对象技术,把猫的特性提取出来-->猫类,然后再实例化对象。不同的猫拥有共同的属性,只是属性值不一样。如此编程,完全符合我们思维的一般逻辑,且代码简练易读。

    2.类和对象的区别与联系
           (1)、类是抽象的,概念的,代表一类事物,比如人类,猫类..
           (2)、对象是具体的,实际的,代表一个具体事物
           (3)、类对象的模板,对象是类的一个个体,实例
          3.如何定义类
         一个全面的类定义比较复杂,如:

    package 包名;
      class 类名 extends 父类 implements
        接口名{
           成员变量;
           构造方法;
           成员方法;
      }

    要透彻的掌握类,必须要了解类的构成,下面由简单到复杂逐步完善类的定义:

    class 类名{    // ---->   待定...
    
      成员变量;
    
    }

    类的成员变量是类的一个组成部分,一般是基本数据类型,也可是引用类型。比如我们前面定义猫类的int age 就是成员变量。

    4.如何创建对象
          创建一个对象有两种方法
          1、先声明再创建
               a.对象声明
                     类名  对象名;
              b.对象创建
                    对象名 = new  类名();
           2、一步到位法
                   类名 对象名=new  类名()
          另外、对象访问(使用)对象的成员变量的格式一般是:  对象名.变量名; (注加下控制符此表达就不准确了)对象总是存在内存中的!
    例:定义一个人类(Person)(包括名字、年龄),用一步到位法去创建一个对象

    //定义个人类
    class Person{
       int age;
       String name;
    }

    使用个人类:

    Person1 a=new Person1();//用一步到位法去创建一个对象
    a.age=10;
    a.name="小明";
    Person1 b;  //创建对象b
    b=a;
    System.out.println(b.name);//输出“小明”
    b.age=200;
    System.out.println(a.age);//输出a.age为200

    5.类--成员方法

    在某些情况下,我们要需要定义成员方法。比如人类:除了有一些属性外(成员变量表示的年龄、姓名等),我们人类还有一些行为比如:可以说话、跑步..,通过学习,我们人类还可以做算术题。这时就要用成员方法才能完成。

    现在要求对Person类完善:(1)添加speak成员方法,输入出:我是一个好人(2)添加jisuan成员方法,可以计算从1+..+1000的结果(3)修改jisuan成员方法,该方法可以接收一个数n,计算从1+..+n的结果(4)添加add成员方法,可以计算两个数的和。

    类的成员方法(成员函数)定义:成员方法也叫成员函数,这里希望大家不要被两个名词搞晕了。

    public 返回数据类型方法名(参数列表)
    {
         语句;//方法(函数)主体
    }

    说明:

         a.参数列表:表示成员函数输入

         b.数据类型(返回类型):表示成员函数输出

         c.函数主体:表示为了实现某一功能代码块

    案例:类方法的调用[Demo108.java]

    public class Demo108{
        public static void main(String []args){
        Person p1=new Person();
        p1.speak();//调用speak方法
        p1.jiSuan();//调用计算方法
        p1.jiSuan(200);//调用可以传入参数的计算方法
        p1.add(12,10);//调用两个数的和
        
        int res=p1.add2(23,34);//调用两个数的和并返回值到res中
        System.out.println("res返回值是:"+res);
        System.out.println("num1+num2+num3="+p1.add3(2,2.3f,4.5f));//返回类型一定要一致否则报错
      }
    }

    补充:定义名字的几个方法:

          1、驼峰法 如myCry;2、下划线法my_cry

    方法名在有不同参数的情况下可以使用同一个方法名,即有参数和没参数的方法可以同名。

    下面定义Person类:

    class Person{ //请注意类名首写字母应为大写如Person为类名 
         int age;
        String name;
        //1、可以输出我是好人方法
        public void speak(){  //请注意方法名的首写字母应为小写如speak为方法名
            System.out.println("我是一个好人");
        }
        //2、可以计算1+..+1000的方法
        public void jiSuan(){
            int result=0;
            for(int i=1;i<=1000;i++){
                result=result+i;
            }
        System.out.println("1+..+1000结果是"+result);
        }
        //3、带参数的成员方法,可以输入n值并计算1+..+n
        public void jiSuan(int n){
            int result=0;
            for(int i=1;i<=n;i++){
                result+=i;
            }
            System.out.println("1+..+n结果是"+result);
        }
        //4、计算两个数的和
        public void add(int num1,int num2){
            int result=0;    //与下面一句等同于return num1+num2;
            result=num1+num2;
            System.out.println("num1+num2="+result);
        }
        //5、计算两个数的和,并将结果返回给主调(调用它的)函数
        //注意:返回类型和返回结果的类型要一致
        //注意:在调用某个成员方法的时候,给出的具体数值的个数
        //和类型要相匹配。
        public int add2(int num1,int num2){
            return num1+num2;
        }
        //6、计算两个float数的和,并将结果返给主调函数
        public float add3(int num1,float num2,float num3){
            return num1+num2+num3;
        }
    }

    类的成员方法声明,格式为:

           访问修饰符 数据类型 函数名(参数列表);

    例:

        public int test(int a);/*方法声明*/

    在给Person类添加add方法的例题中,我们看到的关键字return,它的功能是把表达式的值返回的值返回给主调函数的方法。

    return 表达式;

    类的成员方法(函数)--特别说明

    1、方法的参数列表可以是多个,并且数据类型可以是任意的类型int float double char等。

    访问修饰符 返回数据类型 函数名(参数列表){
         语句; //函数主体
    }

    2、方法的返回类型可以是任意的数据类型(int,float,double,char..)也可以没有返回值void表示没有返回值。

    访问修饰符 返回数据类型 函数名(形参列表){
        语句; //函数主体
    }

    案例1:编写一个成员函数,从键盘输入一个整数(1-9),打印出对应的乘法表[Demo110.java]

    //实例键盘输入打印乘法表[Demo110.java]
    import java.io.*;
    public class Demo110{
        public static void main(String []args){
            Cfb jiu=new Cfb();
                jiu.cf();
        }
    }
    class Cfb{
        public void cf(){
            try{
            //输入流,从键盘接收数
            InputStreamReader isr=new InputStreamReader(System.in);
            BufferedReader br=new BufferedReader(isr);
            //给出提示
            System.out.println("请输入1-9,按0退出:");
            //从控制台读取一行数据
            String a1=br.readLine();
            //把String转为int
            int num1=Integer.decode(a1);
                for(int i=1;i<=num1;i++){
                    for(int j=1;j<=i;j++){
                        System.out.print(i+"×"+j+"="+(i*j)+"	");
                    }
                    System.out.println();            
                }
            }catch(Exception e){
              e.printStackTrace();
             }
        }
    }

    案例2:设计计算机类,要求如下:[Demo109.java]

    属性:品牌(Brand)、颜色(Color)、cpu型号(CPU)、内存容量(Memory)、硬盘大小(Harddisk)、价格(Price)、工作状态(Work)

    方法:打开(Open)、关闭(Close)、休眠(Sleep)

    创建一个计算机对象,调用打开,关闭方法。

    //计算机类与对象的代码
    import java.io.*;//加载IO流包
    public class Demo109{
        public static void main(String []args){
            Computer Pc=new Computer();
                Pc.Brand="品牌";
                Pc.Color="颜色";
                Pc.Cpu="Cpu型号";
                Pc.Memory="内存容量";
                Pc.Hd="硬盘容量";
                Pc.Price="价格";
                Pc.Work="工作状态";
                try{
                //输入流,从键盘接收数
                InputStreamReader isr=new InputStreamReader(System.in);
                BufferedReader br=new BufferedReader(isr);
                //给出提示
                System.out.println("请输入0-9控制机器");
                //从控制台读取一行数据
                String a1=br.readLine();
                //把String转为float
                float num1=Float.parseFloat(a1);
                if(num1==0){Pc.open();}
                else if(num1==1){Pc.close();}
                else if(num1==2){Pc.sleep();}
                else if(num1==3){System.out.println(Pc.Brand);}
                else if(num1==4){System.out.println(Pc.Color);}
                else if(num1==5){System.out.println(Pc.Cpu);}
                else if(num1==6){System.out.println(Pc.Memory);}
                else if(num1==7){System.out.println(Pc.Hd);}
                else if(num1==8){System.out.println(Pc.Price);}
                else if(num1==9){System.out.println(Pc.Work);}
                else {System.out.println("输入错误!");}    
                }catch(Exception e){ 
                   e.printStackTrace();
                }
        }
    }
    
    class Computer{
        String Brand;
        String Color;
        String Cpu;
        String Memory;
        String Hd;
        String Price;
        String Work;
        public void open(){
            System.out.println("开机");
        }
        public void close(){
            System.out.println("关机");
        }
        public void sleep(){
            System.out.println("休眠");
        }
    }

    至此,类的定义便可完善一步:

    class 类名{
     
         成员变量; 
         成员方法;
    }
  • 相关阅读:
    Flink 1.9 实战:使用 SQL 读取 Kafka 并写入 MySQL
    Spring 社区的唯一一个国产开源项目
    使用DynamoShake从dynamodb迁移到mongodb
    1754-I Hate It 线段树(单点替换,区间最值)
    1166-敌兵布阵 线段树(单点增减,区间求和)
    P1078 文化之旅
    P1107 最大整数
    521. [NOIP2010] 引水入城 cogs
    P1137 旅行计划
    P2678 跳石头(二分答案)
  • 原文地址:https://www.cnblogs.com/Davis812/p/3899062.html
Copyright © 2011-2022 走看看