1.面向对象本质
a、以类的方法组织代码,以对象的方式组织数据。
b、面向对象三大特性
封装:属性私有,get/set
package Day03;
/**
* 封装特性
*/
public class Teacher {
/**
* 属性私有 private
*/
private String name;
private int id;
private int age;
public String getName() {
return name;
}
/**
* 可以对一些不合法数据在set方法进行过滤
*
* @param name name
*/
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
继承
类和类之间的关西
关键字extends;
is a的关系,子类是父类的扩展;
java 只能单一继承;
object类:在java中都默认直接或者间接继承object类;
super;
方法重写
只在继承关系中存在,区别方法重载;
@override;
只和非静态方法有关;
方法修饰符:可以扩大,不能缩小;
异常:异常范围可以缩小,不能扩大;
重写意义: 子类可能不需要父类某些功能。
ctr+h显示继承关系;
私有属性和方法无法被继承。
/**
* 继承关系学习
*
* 不需要显示的继承object
*/
public class Person {
// 私有属性和方法不能被继承
protected String name = "teacher";
public Person() {
System.out.println("Teacher 构造函数被执行。");
}
}
/**
* 继承关键字extends,
*/
public class Student extends Person {
private String name = "student";
public Student() {
// super 先执行父类构造函数
// 如果显示调用 super() 必须写在第一行
System.out.println("Student 构造函数被执行");
}
public void test(String name) {
System.out.println(name); // 输入参数
// this调用自己的, super调用父类
System.out.println(this.name); // student
System.out.println(super.name); // teacher
}
}
多态
多态是方法的多态。
存在条件:继承关系;方法需要重写;父类引用指向子类对象 Father f = new Son();
static(类)方法final(常量)pivate都不能重写。
2、类和对象关系
类是抽象的,对象是具体的。
3、创建和初始化对象
a、使用new关键字创建对象,并且new时候会调用构造方法,给属性赋值,Java提供默认无参构造函数
package Day03;
/**
* 面向对象学习,student就是一个学生类,类是抽象的,用来组织代码(属性和方法),对象是具体的,用来组织数据。
*/
public class Student {
/**
* 类的构成,属性和方法
* // 方法 1、静态方法, 类名.方法名;
* // 2、非静态方法,实例化才能使用
* // 静态方法和类一起创建,非静态方法只有实例化之后才存在
*/
String name;
int age;
public void study() {
System.out.println(this.name + "在学习");
}
/**
* 创建和初始化对象
* 如何创建: new
* 初始化: 构造方法, java中提供了默认的无参构造方法
* 属性默认初始值
* 数值 0 0.0
* char u000
* boolean FALSE
* 引用类型 全部为null
* 对象是通过引用来操作的,栈里面存的是对象在堆里面的地址
*/
}
b、构造函数
特点:必须和类名相同,没有返回值,也不能写void;
作用:new的时候调用,用来初始化属性;
注意:定义有参构造也必须显示定义无参构造。
/**
* 构造器学习
*
*/
public class Person {
String name;
/**
* 构造方法,作用:实例化初始值,new的时候调用此方法,因此使用new关键字必须有构造方法
*
*/
public Person() {
}
// 有参构造定义的话,无参构造也必须显示定义
// alt + insert 快捷键生成构造方法,select none 生成无参构造
public Person(String name) {
this.name = name;
}
/**
* 构造器
* 两个特点
* 作用
* 注意点:定义有参,必须显示定义无参
* this 表示当前类
*/
}