JAVA学习笔记03

面向对象之封装

01_面向对象(构造方法Constructor概述和格式)

* A:构造方法概述和作用

       * 给对象的数据(属性)进行初始化

* B:构造方法格式特点

       * a:方法名与类名相同(大小也要与类名一致)

       * b:没有返回值类型,连void都没有

       * c:没有具体的返回值return;

class Demo1_Constructor {                                     //Constructor构造

       public static void main(String[] args) {

              Person p = new Person();                          //在一创建对象的时候,系统就帮我调用了构造方法

              //p.Person();                                             //构造方法不能用对象调用

              p.show();

 

              Person p2 = new Person();                        //再次创建对象

      

              p2.show();

       }

}

 

/*

* A:构造方法概述和作用

       * 给对象的数据(属性)进行初始化

* B:构造方法格式特点

       * a:方法名与类名相同(大小也要与类名一致)

       * b:没有返回值类型,连void都没有

       * c:没有具体的返回值return;

*/

 

class Person {

       private String name;

       private int age;

 

       //构造方法

       public Person() {

              //System.out.println("Hello World!");

              //return;                                                   //构造方法也是有return语句的,格式是return;

              name = "张三";

              age = 23;

       }

 

       public void show() {

              System.out.println(name + "..." + age);

       }

}

构造方法的作用及格式特点分别是什么?

* a:方法名与类名相同(大小也要与类名一致)

* b:没有返回值类型,连void都没有

* c:没有具体的返回值return;

构造方法可以重载吗?

——可以!

 

       02_面向对象(构造方法的重载及注意事项)

* A:案例演示
    * 构造方法的重载
    * 重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表
* B:构造方法注意事项
    * a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
    * b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
        * 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法

class Demo2_Person {

       public static void main(String[] args) {

              Person p1 = new Person();

              p1.show();

 

              System.out.println("---------------------");

 

              Person p2 = new Person("张三",23);

              p2.show();

 

              System.out.println("---------------------");

 

              Person p3 = new Person("李四",24);

              p3.show();

       }

}

/*

* A:案例演示

       * 构造方法的重载

       * 重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表

* B:构造方法注意事项

       * a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。

       * b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。

              * 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法

             

*/

class Person {

       private String name;                   //姓名

       private int age;                           //年龄

 

       public Person() {                        //空参构造

              System.out.println("空参的构造");

       }

 

       public Person(String name,int age) {

              this.name = name;

              this.age = age;

              System.out.println("有参的构造");

       }

      

       public void show() {

              System.out.println(name + "..." + age);

       }

}

使用构造方法的时候,注意事项有哪些?

* a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。

* b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。

* 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法

 

  • 思考题:构造方法,set方法都可以给成员变量赋值,这两种赋值方式有什                          么区别?

 

       03_面向对象(给成员变量赋值的两种方式的区别)

* A:setXxx()方法
    * 修改属性值 
* B:构造方法
    * 给对象中属性进行初始化 

class Demo3_Person {

       public static void main(String[] args) {

              Person p1 = new Person("张三",23);

              //p1 = new Person("张天一",23); //这种方式看运行结果貌似是改名了,其实是将原对象变成垃圾

              System.out.println(p1.getName() + "..." + p1.getAge());

 

              System.out.println("--------------------");

              Person p2 = new Person();          //空参构造创建对象

              p2.setName("李四");

              p2.setAge(24);

 

              p2.setName("李鬼");

              System.out.println(p2.getName() + "..." + p2.getAge());

       }

}

/*

构造方法

       给属性进行初始化

setXxx方法

       修改属性值

       这两种方式,在开发中用setXxx更多一些,因为比较灵活

*/

class Person {

       private String name;                          //姓名

       private int age;                                  //年龄

 

       public Person() {                               //空参构造

       }

 

       public Person(String name,int age) {//有参构造

              this.name = name;

              this.age = age;

       }

      

       public void setName(String name) {   //设置姓名

              this.name = name;

       }

 

       public String getName() {                  //获取姓名

              return name;

       }

 

       public void setAge(int age) {              //设置年龄

              this.age = age;

       }

 

       public int getAge() {                          //获取年龄

              return age;

       }

}

 

       04_面向对象(学生类的代码及测试)

* A:案例演示

       * 学生类:

              * 成员变量:

                     * name,age

              * 构造方法:

                     * 无参,带两个参

              * 成员方法:

                     * getXxx()/setXxx()

                     * show():输出该类的所有成员变量值

* B:给成员变量赋值:

       * a:setXxx()方法

       * b:构造方法

      

* C:输出成员变量值的方式:

       * a:通过getXxx()分别获取然后拼接

       * b:通过调用show()方法搞定

class Demo4_Student {

       public static void main(String[] args) {

              Student s1 = new Student();                             //使用空参构造

              s1.setName("张三");                                               //设置姓名

              s1.setAge(23);                                                        //设置年龄

 

              System.out.println("我的姓名是:" + s1.getName() + ",我的年龄是:" + s1.getAge());

              //getXxx()获取属性值,可以打印,也可以赋值给其他的变量,做其他的操作

              Student s2 = new Student("李四",24);

              s2.show();                                                              //只是为了显示属性值

       }

}

/*

* A:案例演示

       * 学生类:

              * 成员变量:

                     * name,age

              * 构造方法:

                     * 无参,带两个参

              * 成员方法:

                     * getXxx()/setXxx()

                     * show():输出该类的所有成员变量值

* B:给成员变量赋值:

       * a:setXxx()方法

       * b:构造方法

      

* C:输出成员变量值的方式:

       * a:通过getXxx()分别获取然后拼接

       * b:通过调用show()方法搞定

*/

 

class Student {

       private String name;                                               //姓名

       private int age;                                                       //年龄

 

       public Student(){}                                                  //空参构造

 

       public Student(String name,int age) {               //有参构造

              this.name = name;

              this.age = age;

       }

 

       public void setName(String name) {                        //设置姓名

              this.name = name;

       }

 

       public String getName() {                                       //获取姓名

              return name;

       }

 

       public void setAge(int age) {                                   //设置年龄

              this.age = age;

       }

 

       public int getAge() {                                               //获取年龄

              return age;

       }

 

       public void show() {

              System.out.println("我的姓名是:" + name +  ",我的年龄是:" +  age);

       }

}

  •     模仿刚才的学生类代码,写一个手机类并测试。

手机类:

                  成员变量: 品牌(brand),价格(price)

                  构造方法: 无参构造,带参构造

                  成员方法:

        各个字段对应的setXXX()和getXXX()方法,

        show()方法:这个方法用来显示手机的品牌和价格

 

 

       05_面向对象(手机类的代码及测试)

 

* A:案例演示
    * 模仿学生类,完成手机类代码

class Demo5_Phone {

    public static void main(String[] args) {

        Phone p1 = new Phone();

        p1.setBrand("苹果");

        p1.setPrice(1500);

        System.out.println(p1.getBrand() + "..." + p1.getPrice());

 

        Phone p2 = new Phone("小米",98);

        p2.show();

    }

}

/*

手机类:

    成员变量:

        品牌brand,价格price

    构造方法

        无参,有参

    成员方法

        setXxx和getXxx

        show

*/

class Phone {

    private String brand;                      //品牌

    private int price;                         //价格

 

    public Phone(){}                           //空参构造

 

    public Phone(String brand,int price) {     //有参构造

        this.brand = brand;

        this.price = price;

    }

 

    public void setBrand(String brand) {       //设置品牌

        this.brand = brand;

    }

 

    public String getBrand() {                 //获取品牌

        return brand;

    }

 

    public void setPrice(int price) {          //设置价格

        this.price = price;

    }

 

    public int getPrice() {                    //获取价格

        return price;

    }

 

    public void show() {

        System.out.println(brand + "..." + price);

    }

}

 

posted @ 2019-02-11 19:56  淼喵  阅读(121)  评论(0)    收藏  举报