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方法都不提供,表示不可读写
评论