面向对象编程OOP
对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对的思路来分析整个系统,但是具体到微观操作仍需要面向过程的思路来处理,面向对象就是以类的方式组织代码,以对象的形式封装数据
- 三大特性
- 封装
- 继承
- 多态
认知中先有对象,后有类;
对象是具体的,类是抽象的
代码中先有类后有对象—new
使用new关键字,本质上是在调用构造器(out+insert可以生成构造器 construction)
构造器用来初始化值,new的时候必须存在
实参——重载 构造器
类里面存在属性和方法
方法的建立:
修饰符 返回值的类型 方法名()
public String hello(){
方法体
返回值
return “helloWorld”;
return 结束方法返回一个结果
}
在窗口右键类,单击split vertically可以两个窗口
- 构造器
一个类即使什么都不写,也会默认形成一个方法(构造器)无参构造- 和类的名字相同
- 没有返回值类型,也不能为void
作用:
- 初始化对象的值
- new 本质上在调用构造器
封装
高内聚,低耦合
仅暴露少量的方法给外部使用,提高程序的安全性, 隐藏代码的实现细节
在set方法里放安全性验证if else
private String = name;
get/set方法
public String getName(){
return this.name}
public void setName(){
this.name = name;}
在main方法里:
new 一个student s1;
s1.setName = “c”;
System.out.println(s1.getName);
继承
extends 继承是类和类之间的关系, 都默认继承object类;
老师(子类)是人(父类)
public class person{}
public class teacher extends person{}
从子类中调用父类的内容用super.
方法重写 多态
最后这三种方法是不能重写的
instanceof
同级之间不能比较
System.out.println(X instanceof Y);
X 和 Y 是否存在父子关系;true or false
父类= new 子类;
父类引用指向子类的对象:
Person person = student;
父类要转换成子类需要强制转换;
static
非静态方法必须先new实例化之后才能用;
静态方法可以直接用
public class demo{
{匿名代码块
}
先执行并只执行一次静态代码块—匿名代码块—构造方法(构造器)
在final修饰符—class—类;后面就不能继承子类.
abstract
继承了抽象类方法的所有子类, 都必须要实现他的方法;
public abstract void 方法名();
抽象类不能new实例化, 只能靠子类去实现—约束;
抽象类中可以写普通方法, 抽象方法必须写在抽象类中;
接口
extends是单继承的,接口可以多继承
接口的本质是契约,interface
- 接口里只能写一些简单的方法,接口里的所有定义都是抽象的public abstract;
- 接口里定义的常量都是public static final;一般都是创建方法 通过约束来实现;
接口都需要有实现类xx-impl (implement userService), 而且里面要重写所有方法;
接口不能被实例化,接口没有构造方法
内部类
A类中定义了一个B类,那么B类对于A类来说就是内部类;相反就是外部类
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
一个java中可以有多个class,但是只有一个public class (最外层)