禹娜,day19
2020年12月7日
构造函数
构造函数
构造函数也叫构造方法,或者构造器。在java中,当类创建一个对象时会自动调用该类的构造方法,构造方法分为默认构造方法和自定义构造方法。
##### 构造函数的定义
如果类内的方法名称
与类名
相同,并且没有返回值类型
,也不写void
,那么这个方法就叫做构造方法,或构造函数。
class Person{
//Person类的构造方法
public person(){
}
}
构造函数的调用规则
1.实例对象化时,必须调用类的构造函数。也就是在new对象时,一定要调用构造函数。
2.如果类中没有显示定义构造函数,那么JVM会为类自动定义无参的构造函数。如果类中定义了任何一个构造函数,那么JVM就不会为类定义默认的构造函数。
3.构造函数是在实例化对象时自动调用的,或者是在其他构造函数中通过this关键字调用。
public Order(int number){
this.number=number;
}
public Order(){
this(2);
}
4.构造函数不允许使用对象直接调用
5.构造函数调用时根据参数匹配原则调用相应的构造函数。
为什么定义构造函数
构造函数的作用是在创建对象时,为对象的属性初始化。
public class Order{
Sting OrderId;
int number;
//构造函数
public Order(){
orderId="123232";//初始化
number=3;//初始化
}
public static void main(String[] args){
Order order=new Order();
System.out.println(order.orderId);
System.out.println(order.orderId);
}
}
this关键字
this是java的关键字,表示当前正运行的对象,this指代当前对象的引用。
1.使用this调用成员变量,解决成员变量与局部变量的同名冲突
public class Person{
public String name;
Public void setName(String name){
//成员变量与局部变量同名,this.name表示成员变量,name表示局部变量
this.name=name;
}
}
public class Person{
Public String name;
public void setName(String str){
//成员变量与局部变量不同,this可以省略
name=str;
}
}
2.使用this调用成员方法
public class Person{
public void eat(){
}
public void work(){
this.eat();//this调用成员方法,可以省略this
}
}
3.使用this调用重载的构造方法,只能在构造方法中使用,且必须是构造方法的第一条语句。
public class Person{
public String name;
public int age;
public Peron(String name){
this.name=name;
}
public Person(String name,int age){
this(name);
this.aeg=age;//调用重载的构造方法
}
}
构造函数的重载
构造函数重载与方法重载完全相同
public class Order{
String orderId;
int number;
//第一种重载
public Order() {
orderId = "2031223123";//初始化
number= 3;//初始化
}
//第二种重载
public Order(String orderId,int number) {
this.orderId = orderId;
this.number= number;
}
}
构造函数的调用
调用本类的构造函数使用this().
调用父类的构造函数使用super();
但是必须写在构造函数内的第一行代码,否则不能编译。
public Score(int lishi) {
this.lishi = lishi;
}
public Score() {
this(5);
}
public Score(int a,int b) {
super();
}
封装
封装
封装是面向对象的三大特征之一。是用来保护数据的(数据的读取和写入)
数据用四种保护方式,分别是
-
不允许读,不允许写。
-
允许读,不允许写。
-
允许写,不允许读。
-
允许读,允许写。
方法被调用也分为四种情况
-
类内的其他方法可以调用吗
-
同包中的其他类可以调用吗
-
子类可以调用吗
-
任务类可以调用吗
封装的实现方法
封装是通过访问修饰符来实现的。访问修饰符一共有四个:public,protected , private,默认
访问修饰符
private 可以修饰属性,可以修饰方法,不能修饰类。
private的使用规则:private修饰的属性或方法只允许在类内被访问。Private是最严格的封装。*
*** public 表示共有,由public访问修饰符修饰的属性或方法或类可以在任何地方被调用。***
默认访问修饰符如何实现封装
类,属性,方法定义时不写任何访问修饰符,此时就是默认。
class OldBing {
String name;
void show() {
this.name = "哈哈";
}
}
封装的私有属性
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方法都不提供,表示不可读写。
近期评论