从c++到Java,关于Java面向对象基础的学习(二)

举报
莫浅子 发表于 2022/10/04 21:35:20 2022/10/04
【摘要】 ​  一、构造器 构造器的作用  用于初始化一个类的对象,并返回对象的地址Car c = new Car();构造器的定义格式  修饰符 类名(形参列表){  ... } public class Car { ... // 无参数构造器 public Car(){ ... } // 有参数构造器 public Car(String n, String b){ ... } } 初始化对象的格式...

  

一、构造器

 

构造器的作用

 用于初始化一个类的对象,并返回对象的地址
Car c = new Car();

构造器的定义格式  

修饰符 类名(形参列表){

 

...
}

 public class Car {

...
// 无参数构造器
public Car(){
...
}
// 有参数构造器
public Car(String n, String b){
...
}
}

 初始化对象的格式

类型 变量名称 = new 构造器;

 


Car c = new Car();


构造器的分类

类型 变量名称 = new 构造器;

(1)无参数构造器(默认存在的):初始化的对象时,成员变量的数据均采用默认值。
(2)有参数构造器:在初始化对象的时候,同时可以为对象进行赋值。


注意事项

任何类定义出来,默认就自带了无参数构造器,写不写都有。

 一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写一个无参数构造器了。

编辑


具体案例 

调用无参数构造器

编辑

调用有参数构造器

 编辑




二、this关键字 

this关键字是什么

代表当前对象的地址

编辑

上图中this表示与 c 的地址一样,都指向new Car(), 如果调用了c.run(),那么run里面的c也指向new Car()

this关键字

作用:出现在成员方法、构造器中代表当前对象的地址,用于访问当前对象的成员变量、成员方法


 在写代码的时候如果用以下的代码去写往往是被诟病的,因为n,和p没有实际意义,

public class Car {
   String name;
   double price;
   public Car(String n , double b){
   name = n;
   price = b;
  } 
}

如果用了this关键字就可以正确的表示,表示为上面第一个String name里面的name赋值和double price 里面的price赋值

public class Car {
    String name;
    double price;
    public Car(String name , double price){
    this.name = name;
    this.price = price; 
    } 
}

 样例

编辑


this在成员方法中的用法

错误的表示

public class Car {
   String name;
   double price;
   public void goWith(String name){
   System.out.println(name + "正在和" + name + "一起比赛!!");
   }
}

 编辑


正确的表示

public class Car {
    String name;
    double price;
    public void goWith(String name){
    System.out.println(this.name + "正在和" + name + "一起比赛!!");
    }
}

 例子编辑


三、封装

面向对象的三大特征:封装,继承,多态


什么是封装? 隐藏实现细节,暴露出合适的访问方式。(合理隐藏、合理暴露0


封装的原则:对象代表什么,就得到对应的数据并提供数据对应的行为


封装的实现步骤

一般对成员变量使用private(私有)关键字修饰进行隐藏,private修饰后该成员变量就只能在当前类中访问。

提供public修饰的公开的getter、setter方法暴露其取值和赋值。

在赋值给一个学生年龄的例子中非常容易出现,入过学生的年龄错误了,为负数,仍然会继续输入,那么该如何修改呢,这是就需要封装,通过一定暴露和封装完成

编辑


Javabean综合案例(猫眼电影系统)

测试案例 对象

package movieDemo;

public class Test {
    public static void main(String[] args) {
        //1、设计电影类
        //2、创建三个电影对象,分装电影信息
        //3、定义一个电影类型数组,存储电影的对象
        Movie[] movies = new Movie[3];
        movies[0] = new Movie("长津湖",9.7,"吴京");
        movies[1] =new Movie("我和我的父辈",9.6,"吴京");
        movies[2] = new Movie("五个扑水的少年",9.5,"王川");

        //4、遍历数组中每个对象
        for(int i = 0;i < movies.length;i++) {
            Movie m = movies[i];
            System.out.println("电影名:" + m.getName());
            System.out.println("得分:" + m.getScore());
            System.out.println("主演:" + m.getActor());
            System.out.println("-------------------");
        }
    }
}

package movieDemo;

import javax.swing.*;

public class Movie {
    //1、成员变量
    private  String name;
    private  double score;
    private  String actor;

    //创建无参数构造器

    public Movie() {

    }

    //创建有参数构造器

    public Movie(String name, double score, String actor) {
        this.name = name;
        this.score = score;
        this.actor = actor;
    }


    // 2、getter +setter

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }
}



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。