使用new关键字创建对象的时候,除了分配内存空间之外,还会给创建好的对象赋默认值进行初始化,以及调用类中的构造器。
示例:
Student类
package com.wmwx.oop.Demo01; //学生类 public class Student { //属性:字段 String name; int age; //方法 public void study(){ System.out.println("学生"+this.name+"在学习。"); } }Application类(启动类)
package com.wmwx.oop.Demo01; //启动类 public class Application { //一个项目应该只存在一个main方法 public static void main(String[] args) { //类是抽象的,需要实例化 //类实例化后会返回一个自己的对象 //student对象是Student类的一个实例 Student student = new Student(); student.study(); //输出"学生null在学习。" student.name = "小明"; student.study(); //输出"学生小明在学习。" } } 构造方法当一个对象被创建时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有返回值。
一个类即使什么都不写,也会存在一个构造方法。因为 Java 自动提供了一个默认构造方法,其访问修饰符和类的访问修饰符相同。
一旦自己定义了构造方法,默认的构造方法就会失效。
示例:
Person类:
package com.wmwx.oop.Demo01; public class Person { String name; //使用快捷键alt+insert可以自动生成构造方法 //无参构造 public Person(){ this.name = "一个无名氏"; } //有参构造(一旦定义有参构造,就必须显式定义无参构造) public Person(String name){ this.name = name; } }Application类:
package com.wmwx.oop.Demo01; public class Application { public static void main(String[] args) { //使用new关键字,本质是在调用构造方法 Person person1 = new Person(); //调用无参构造 System.out.println(person1.name); //输出"一个无名氏" //利用构造方法,可以初始化对象 Person person2 = new Person("惟妙惟霄"); //调用有参构造 System.out.println(person2.name); //输出"惟妙惟霄" } } 内存分析过程如下:
创建类
在堆中存放类和类中的静态方法
创建对象
在堆中为对象开辟空间
在栈中存放对象的引用变量名
令对象的引用变量名指向堆中开辟的空间
封装所谓封装,即该露的露,该藏的藏。程序设计要追求“高内聚,低耦合”。
高内聚:类的内部数据操作细节自己完成,不允许外部干涉。
低耦合:仅暴露少量的方法给外部使用。
对于代码而言,总结起来就一句话:属性私有,get/set。
意义:
提升程序的安全性,保护数据
隐藏代码的实现细节
统一接口
提高了系统的可维护性
示例:
Student类:
package com.wmwx.oop.Demo03; public class Student { //属性私有 private String name; private int id; private String gender; private int age; //需要提供共有的get和set方法 //get方法:获取数据 public String getName() { return name; } //set方法:设置数据 public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { if (age<0||age>120){ this.age = 3; }else{ this.age = age; } } }Application类:
package com.wmwx.oop; import com.wmwx.oop.Demo03.Student; //启动类 public class Application { public static void main(String[] args) { Student student = new Student(); student.setName("惟妙惟霄"); student.setId(123456); student.setGender("男"); student.setAge(130); System.out.println(student.getAge()); //输出3 } } 继承继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
在 Java 中通过 extends 关键字可以声明一个类是从另外一个类继承而来的,其语法如下:
class 子类 extends 父类 { }extends的意思是扩展,子类是对父类的扩展。
继承的注意事项:
Java只有单继承,没有多继承。
在Java中,所有类都默认直接或间接继承自Object类。
在Java中,可以使用this指代当前类,并使用super指代父类。
super的注意事项:
super调用父类的构造方法,必须在构造方法的第一行。
super只能出现在子类的方法或构造方法中。
super和this不能同时调用构造方法。