创建对象内存分析
类是抽象的,对象是类的实例化。
简单小结
-
类与对象
类是一个抽象的模块,而对象是类的具体实例
- 方法
会定义和调用
- 对象的引用
引用类型:基本类型(8)
对象是通过引用来操作的:栈——>堆(地址)
dog.name=dog //给栈中的dog赋值,值放在一个有地址的堆中
- 属性:字段Field 成员变量
默认初始化:
数字:0 0.0
char:u0000
boolean:false
引用:null
属性的定义:修饰符 属性类型 属性名 =属性值
-
对象的创建和使用
-
必须使用new关键字创造对象,还需要构造器,默认会自动创建一个无参构造器
Person zy=new Person()
-
对象的属性 zy.name zy.age
-
对象的方法 zy.study()
. 类:
静态的属性 属性 (name age…)
动态的方法 方法 (study()sleep() )
封装
属性私有:get/set
封装的意义
- 提高程序的安全性,保护数据
- 隐藏代码细节
- 统一接口
- 系统可维护性增加
package OOP;
import OOP.demo04.Student;
//一个项目应该只存在一个main方法
public class Application {
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("张宇");
s1.setAge(9);
System.out.println(s1.getName());
System.out.println(s1.getAge());
}
}
/*
package OOP.demo04;
//类
//private:私有
public class Student {
//属性私有
//名字
private String name;
//学号
private int id;
//性别
private char sex;
//年龄
private int age;
//提供一些可以操作这些属性的方法
//提供一些public的get、set方法
//get:获得这个数据
public String getName(){
return name;
}
//set:给这个数据设置值
public void setName(String name){
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age>120||age<0)
age=3;
this.age = age;
}
}
*/
继承
- 继承的实质是对某一批类的抽象
- extends 的意思是扩展,子类是父类的扩展
- java中只有单继承没有多继承
子类继承了父类就会拥有父类的全部方法
在java中所有的类都直接或者间接继承object类
package OOP.demo05;
//Person 人:父类
//在java中所有的类都直接或者间接继承object类
public class Person /*extends Object*/{
//public
//protected
//default
//private
private int money=10_0000_0000;
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public void say(){
System.out.println("说了一句话");
}
}
}
/*
package OOP;
import OOP.demo05.Person;
import OOP.demo05.Student;
//一个项目应该只存在一个main方法
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.say(); //子类继承了父类就会拥有父类的全部方法
student.setMoney(1000000);
System.out.println(student.getMoney());
Person person = new Person();
person.getClass();//直接继承Object
student.getClass();//间接继承Object
}
}
*/
package OOP;
import OOP.demo05.Person;
import OOP.demo05.Student;
//一个项目应该只存在一个main方法
public class Application {
public static void main(String[] args) {
Student student = new Student();
/* student.test("张宇");
student.test1();
*/
}
}
//====================================================================================
package OOP.demo05;
//Student is Person Student:子类(派生类)
//子类继承了父类就会拥有父类的全部方法
public class Student extends Person{
public Student() {
//子类无参构造器第一行默认调用了父类的无参构造 super()
System.out.println("Student无参执行了");
}
private String name="小宇宙";
public void print(){
System.out.println("Student");
}
public void test(String name ){
System.out.println(name);//张宇
System.out.println(this.name);//小宇宙
System.out.println(super.name);//大宇宙
}
public void test1(){
print();//Student
this.print();//Student
super.print();//Person
}
public void test2(){
print();
}
}
//===========================================================================
package OOP.demo05;
//Person 人:父类
//在java中所有的类都直接或者间接继承object类
public class Person /*extends Object*/{
protected String name="大宇宙";
public Person() {
System.out.println("Person无参构造执行了");
}
//private私有的东西无法被继承
public void print(){
System.out.println("Person");
}
}
Super注意点
- super调用父类的构造方法,必须在构造方法的第一个
- super()必须只能出现在子类构造方法的第一行
- super和this不能同时调用构造方法!(因为两个都必须要在子类)
this注意点
-
this与super代表的对象不同
this:本身调用者的这个类中的对象
super:代表父类对象的应用
-
前提
this:没有继承也能使用
super:只能在继承的条件下使用
-
构造方法
this():本类的构造
super():父类的构造
未解决
已解决 protected :同包不同级,不能跨包使用