面向对象(OOP)08~17
1.封装
"高内聚、低耦合",内部细节自己完成;仅暴露少量方法给外部使用。
属性私有,get/set
// private : 私有
public class Student {
// 属性私有
private String name; // 名字
private int id; //学号
private char sex; //性别
// get 获取数据
public String getName(){
return this.name
}
// set 设定数据
public void setName(name){
this.name = name;
}
}
2.继承(对类的抽象)
类之间有父子关系,通过extends来继承,也可理解为子类是父类的扩展。
继承有两个成员,一个子类(派生类),一个父类(基类);
2.1.子类可以继承父类的所有的方法;
2.2.父类私有的无法继承;
2.3.Java中所有的类都继承Object类;
3.Super详解(与this相似,this指当前,Super指父类)
public class Student extends Person{
public Student(){
// 隐藏代码 super() //会先执行父类的构造函数
System.out.println("student 执行了")
}
}
1.super调用父类的构造方法,必须在构造方法第一行
2.super只能出现在子类的方法或者构造方法中
3.super和this不能同时在构造方法中
4.方法重写(子类中同名同参方法可以替代父类中的同名同参方法)
4.1 父类的引用可以指向子类,方法重写后,调用的是子类的方法
4.2 重写只于非静态的方法、公有有关
4.3 重写只存在于子父类中
4.4 重写的原因:子类的方法和父类需求不一致
5.多态(同一个方法根据发送对象的不同而采取多种不同的行为方式)
5.1 可以实现动态编译
5.2 一个对象的实际类型是确定的,但父类的引用可指向子类,引用类型可以有很多。
// 对象执行的那些方法,主要看左边的类型
// student 能调用自己和父类的方法
Student s1 = new Student();
// 父类可以指向子类,但是不能调用子类的方法
Person s2 = new Student();
Object s3 = new Student();
PS: static(属于类,不属于实例),final,private 都没有多态
6.instanceof 和 引用类型转换
1.instanceof 可判断类之间又没有父子关系;
System.out.println(x instanceof y); //x,y 之间是否父子关系
2.引用类型强制转换 父高子低 类型可以由低到高
Person p = new student();
PS:父类转成子类,可能会丢失方法;
7.static 关键字详解
1.静态属性(变量):类变量,可以通过类直接访问
2.静态方法:类方法,可以通过类直接访问,非静态方法可以直接调用静态方法
3.静态代码块:加载初始化数据,在构造函数之前,永久只执行一次
public class Person {
{
//匿名代码块
}
static {
//静态代码块
}
public person{
// 构造函数块
}
}
// 静态->匿名->构造函数
4.静态导入包
import static java.util.Math.roandom.
8.抽象类
1.通过abstract来修饰类
// abstract
public abstract class Action{
// 抽象方法,只有约束,不用实现
public abstract void doSomething();
}
PS:不能new出来,只是一个约束;抽象类可以写抽象方法;抽象的方法必须在抽象类里
9.接口的定义和实现
1.关键字interface,只有约束
public interface UserService {
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
public class UserSerivceImpl implements UserService{
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
}
2.可以实现多继承
3.接口的属性就是常量
PS:一个好的架构师,就会抽象完成整个项目的接口定义
10.N中内部类(在类的内部定义一个类)
1.类中内部类
public class Outer {
private int id;
public void out(){
System.out.println("outer function");
}
public class Inner{
public void in(){
System.out.println("Inner function");
}
// 内部类可以获取外部类的私有属性
public void getID(){
System.out.println(id);
}
}
}
Outer outer = new Outer();
2.方法内部类
public void method(){
class person{
//方法内部类
}
}
3.匿名内部类
new Apple.eat()
标签:name,17,子类,08,public,OOP,父类,void,String
From: https://www.cnblogs.com/rushintocloud/p/17802575.html