DESKTOP-9EO7JOG_2020_12_7

构造方法

1概念

如果类内的方法名称与类名相同,并且没有返回值类型,也不写void,那么这个方法就叫构造方法(也叫做构造函数或构造器)。

2调用规则

(1)实例化对象时,必须调用类的构造函数,也就是说只要new对象,一定调用构造函数。

(2)<u>如类中没有显示定义构造函数,那么JVM会为类自动定义无参数的构造函数,如果类中显示定义了任意一个构造函数,那么JVM就不会为类定义默认构造函数。</u>

(3)构造函数是在实例化对象时自动调用的,或者在本类的其他构造函数中通过this关键字调用。例如:

(4)构造函数不允许使用对象直接调用。

(5)构造函数调用时根据参数匹配原则调用相应的构造函数。

3定义构造函数

构造函数的作用是在创建对象时,为对象的属性初始化

4this关键字

  • this是java的关键字,表示当前正在运行的对象。
  • this指代当前对象的引用。

5构造函数重载

例如:

public String name;
public String gender;
public int age;
//第一种构造方法重载:定义无参构造方法
public Person() {
    this.name="宋江";
}
第二种构造方法重载:定义有参构造方法
public Person(String name) {
    this.name=name;
}
第一种work()方法重载:无参的work()方法
public void work() {
    System.out.println(this.name+"的工作理念:工作让生活更美好");
}
第二种work()方法重载:有参的work()方法
public void work(String contect) {
    System.out.println(this.name+","+this.gender+","+this.age+"岁的工作理念:"+contect);
}
public static void main(String[] args) {
    Person person = new Person("宋江");//调用Person带有参数构造方法创建对象
    System.out.println("大家好,欢迎"+person.name+"的到来");
    Scanner scanner = new Scanner(System.in);
    System.out.println("请选择性别:(1、男,2、女)");
    switch (scanner.nextInt()) {
    case 1:
        person.gender="男";//为person对象的性别属性赋值
        break;
    case 2:
        person.gender="女";//为person对象的性别属性赋值
        break;
    default:
        System.out.println("输入错误");
        return;
    }
    System.out.println("请输入年龄");
    person.age=scanner.nextInt();//为person对象的年龄属性赋值
    person.work();//调用无参的work()方法
    System.out.println("请重新输入您的工作理念");
    String contect=scanner.next();
    person.work(contect);//调用带参的work()方法
}

6构造函数的调用

调用本类的构造函数使用this(),调用父类的构造函数使用super(),但是必须写在构造函数内的第一行代码,否则不能编译。

例如:

public Score(int math){

this.math = math;

public Score(){

this(5);

public Score(int a,int b){

super();

如下调用是错误的:

封装

1含义

  • 封装就是保护数据的,这里的数据是指类的成员变量,对于保护数据而言就是对数据的读取和写入,数据用四种保护方式,分别是:

(1)不允许读,不允许写

(2)允许读,不允许写

(3)允许写,不允许读

(4)允许读,允许写

  • 封装也是保护方法的,也就是方法是否允许被调用。方法被调用也分为四种情况。

(1)类内的其他方法可以调用吗

(2)同包中的其他类可以调用吗

(3)子类可以调用吗

(4)任务类可以调用吗

2封装如何实现

封装是通过访问修饰符来实现的,共有4个:

public、默认、protected、private

3private访问修饰符如何实现封装

  • private可以修饰属性

  • private可以修饰方法

  • private不可以修饰类

例如:private修饰了属性和方法

public class OldBing{

private String name;

private void show(){

  • private的使用规则:private修饰的属性或方法只允许在类内被访问。private是严格的封装。

4public访问修饰符如何实现封装

由public访问修饰符修饰的属性或方法或类可以在任何地方被调用。public是最开放的封装。

  • public可以修饰属性
  • public可以修饰方法
  • public可以修饰类

5默认访问修饰符如何实现封装

默认是指在类、属性、方法定义时不写任何访问修饰符,此时就是默认。

class OldBing{

String name;

void show(){

this.name="大坏蛋";

  • 默认访问修饰符可以修饰类
  • 默认访问修饰符可以修饰方法
  • 默认访问修饰符可以修饰属性
  • 由默认访问修饰符修饰的类、属性、方法可以被同包的其他类访问

6封装最常用的方法:共有方法封装私有属性

例如:

*public* *class* Score {

*private* *int* math; //private封装属性

*public* *int* getMath() {//public封装方法

*return this.math;* //public方法中返回private属性

​ }

*public* *void* setMath(*int* math) {

*this*.math = math;

​ }

*public* Score(*int* math) {

*this*.math =math;

​ }

}

  • 如果只提供get方法,不提供set方法,表示只读不写
  • 如果只提供set方法,不提供get方法,表示只写不读
  • 如果提供了get方法和set方法,表示可读写
  • 如果get方法和set方法都不提供,表示不可读写

评论