面向对象
本质:以类的方式组织代码,以对象的组织封装数据
三大特性:封装、继承、多态
静态方法不需要实例化,非静态方法不需要实例化。
-
类是一种抽象的数据类型,它是对某一类食物整体的描述和定义,并不能代替某一个实物
-
对象是抽象概念的具体实例
创建与初始化方法
-
使用new关键字创建对象
-
类中的 构造器也称为构造方法,是在进行创建对象的时候必须要调用的,而且构造器有以下两个特点:1、必须和类的名字相同。2、必须没有返回类型,也不能写void
alt+insert快捷键一键生成构造器
package oop.demo_02;
import java.util.SplittableRandom;
public class Person {
String name;
//一个类即使什么都不写,它也会存在一个构造方法
public Person(){//构造方法
//实例化初始值
//1、使用new关键字,本质上是在调用构造器
//2、初始化对象的值
// this.name = "请讲";
}
public Person(String name){
//有参构造:一但有了有参构造,无参就必须显示定义
this.name = name;
}
}
封装
数据的隐藏:通常,应禁止直接访问一个对象中数据的实际表示,而应该通过操作接口来访问,这称为信息隐藏
属性私有:,get/set
package oop.demo_04;
public class Student {
private String name;
private int age;
private int Id;
public void setAge(int age) {
if (age > 120||age<0) {
this.age = age;
}else {
System.out.println("你输入的是个啥?");
}
}
public int getAge() {
return age;
}
public void setId(int id) {
Id = id;
}
public int getId() {
return Id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}//alt+insert快捷键可以快速封装
}
package oop.demo_04;
public class Application {
public static void main(String[] args) {
Student gua = new Student();
gua.setAge(5);
gua.setName("乐平");
System.out.println(gua.getAge());
System.out.println(gua.getName());
}
}
继承
-
继承的本质是对某一批类的抽象
-
extends的意思是扩展,子类是父类的扩展
-
JAVA中类只有单继承,但是没有多继承
-
继承是类和类之间的一种关系,此外类和类之间的关系还有依赖、组合、聚合等
-
继承关系的里两个类,一个是子类(派生类)、一个是父类(基类)
-
在java张,所有的类,都默认直接或者简介继承Object
-
super
-
方法重写
多态
-
多态是方法的多态,没有属性的多态
-
父类和子类,有练习,类型转换异常!ClassCastException!
-
存在条件:继承关系,方法需要重写,父类引用指向子类对象!Father f1 = new Son();
1、static 方法,属于类,不属于实例,不能重写
2、final 常量不能重写
3、private 方法不能重写
instanceof(类型转换),引用类型,判断一个对象是什么类型
1、父类引用指向子类的对象
2、把子类转换为父类,向上转型
3、把父类转换为子类,向下转型;强制转换
4、方便方法的调用,减少重复的代码!简洁
System.out.println(X instanceof Y);
父与子可以转,其他不能转
静态的变量--多线程
抽象类
package oop.demo_09;
//抽象类所有的方法,继承了它的子类,都必须要实现它的方法
//abstract 抽象类:类 extends:单继承~(接口可以多继承)
public abstract class Action {
//约束~有人帮我们实现
//抽象方法,只有方法名字,没有方法的实现
public abstract void doSomething();
//1.不能new这个抽象类,只能靠子类去实现他:约束
//2、抽象类中可以写普通的方法
//3、抽象方法必须在抽象类中
//抽象的抽象:约束
}
抽象类存在构造器吗?
存在 的意义是什么--抽象出来一些方法,提高开发效率
接口
-
普通类:只有具体实现
-
抽象类:具体实现和规范(抽象方法)都有
-
接口:只有规范,自己无法写方法
-
接口的本质是契约,就像我们人间的法律一样,制定好后大家都遵守
-
申明接口的关键字是interface
接口的作用:
-
约束
-
定义一些方法,让不同的人实现
-
方法都是public abstract
-
常量 public static final
-
接口不能被实例化
-
implements可以实现多个接口
-
必须要重写接口中的方法
package oop.demointerface;
//定义的关键字,接口都需要有实现类
public interface Interface {
//接口中的所有定义其实都是抽象的 public abstract
int age = 999;
//接口中的所有定义的方法都是抽象的,public abstract
void add(String name);
void delete(String name);
void update(String name);
}
package oop.demointerface;
//实现了接口的类,就需要重写接口中的方法
//利用接口可以实现多继承
public class Interface_1 implements Interface,TimeService{
内部类
内部类就是一个类的内部再定义一个类,比如A类中定义一个B类,那么B类就是相对A是一个内部类:
1、成员内部类
2、静态内部类
3、局部内部类