简单小结类与对象
- 类是对象的模板,对象是类的实例
- 方法:静态方法 非静态方法 定义 调用
- 对应的引用:
引用类型和基本类型(8)
对象是通过引用来操作的:栈——>堆 - 属性:字段field 成员变量
默认初始化:
数字:0 0.0
char: u0000
boolean:false
引用:null
修饰符 属性变量 属性名 = 属性值 - 对象的创建和使用
1、必须使用new创造对象,构造器 Person person = new Person()
2、对象的属性 person.name = “”;
3、对象的方法 person.sleep(); - 类:静态的属性和动态的方法
- Java三大特征:封装、继承、多态
封装
- “高内聚,低耦合”
高内聚:类的内部数据操作细节自己完成,不允许外部干涉
低耦合:仅暴露少量的方法给外部使用 - 封装(数据的隐藏):应当禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这成为信息隐藏
- 属性私有,get/set
意义:
1. 提高程序安全性,维护数据
2. 隐藏代码的实现细节
3. 统一接口
4. 增加系统的可维护性
package Encapsulation;
public class Application {
public static void main(String[] args) {
//只能new同一个src目录下的类
Student student1 = new Student();
Student student2 = new Student();
System.out.println(student1.getName());
student2.setName("小石榴yyds");
System.out.println(student2.getName());
student1.setAge(-10);
System.out.println(student1.getAge());
student2.setAge(19);
System.out.println(student2.getAge());
}
}
class Student {
//属性私有
private String name;
private int age;
//提供可以操作这个属性的方法
//一些public的get、set方法
//get获得这个数据
public String getName(){
return this.name;
}
//set设置数据的值
public void setName(String name){
this.name = name;
}
public int getAge() { return this.age; }
public void setAge(int age){
if(age < 0) System.out.println("年龄不合理");
else this.age = age;
}
}
继承
- extends
- Java只有单继承,就是一个子类只能有一个父类
- 类与类之间的关系:继承、依赖、聚合、组合
- 快捷键:Ctrl+h ——>父类与子类的关系
- java中所有类都默认继承object类
- 子类可以继承父类的所有public方法和public属性
package Inheritance;
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.say();
System.out.println(student.getMoney());
}
}
class Person {
private int money = 10_0000;
public int getMoney(){ return money; }
public void setMoney(int money){this.money = money;}
public void say(){System.out.println("说话");}
}
class Student extends Person {}
class Teacher extends Person {}
super
- super 与 this 的区别:
this当前类的属性和方法
super父类的属性和方法 - 子类会默认调用父类的无参构造
package Inheritance;
public class Application {
public static void main(String[] args) {
Super suuuuuper = new Super();
System.out.println("=================");
suuuuuper.test1("阿巴阿巴阿巴阿巴阿巴");
System.out.println("=================");
suuuuuper.test2();
}
}
//父类
//人:父类
//子类可以继承父类的所有public方法和public属性
class Person {
protected String name = "小石榴yyds";
public void print(){
System.out.println("Person");
}
public Person(){
System.out.println("Person无参执行");
}
}
//子类
class Super extends Person {
private String name = "xiaoshiliu";
public void print(){
System.out.println("Super");
}
public void test(String name){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
public void test2(){
print();
this.print();
super.print();
}
public Super(){
System.out.println("Super无参执行");
}
}
调用子类构造器时,必须放在子类构造器第一行!!!!
方法重写
1. 重写只与非静态方法有关,与静态方法无关
2. 静态方法与非静态方法的区别:
静态方法:方法的调用只与定义的数据类型有关
非静态方法:子类重写了父类的方法
3. 方法名和参数列表必须相同,方法体不同
4. 修饰符范围可扩大但不能缩小:public > protected > default > private
5. 抛出的异常范围可以缩小但不能扩大:ClassNotFoundException --> Exception
6. 父类的功能不一定能满足子类的需要,所以需要对父类的功能进行重写
去掉static会出现蓝色箭头指向的东西,而且运行结果也变了