1.面向对象编程的本质就是:以类的方式组织代码,以对象的形式封装数据。
2.抽象
3.三大特性:封装,继承,多态
4.静态方法:类名+方法名
//部分代码
public class Student {
public static void say(){
System.out.println("学生说话了");
}
}
public static void main(String[] args) {
Student.say();
}
5.非静态方法
(1)首先要实例化这个类
//对象类型 对象名字 = 对象值
Student student = new Student();
(2)使用方法
student.say();
6.static是和类一起加载的,而类实例化实在时候才存在。
7.student对象就是一个Student类的具体实例
8.构造器:初始化对象的值
(1)和类名相同,无返回值
(2)使用new关键字,本质就是在调用构造器
(3)一旦定义了有参构造,无参构造就必须显示定义
public Person(){
}
public Person(String name){
this.name = name;
}
(3)alt+insert快捷键生成构造
9.封装(数据的隐藏)
(1)“高内聚,低耦合”,高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。
(2)通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
(3)属性私有,get/set(alt+insert)
(4)作用:
提高程序的安全性;隐藏代码的实现细节;同一接口;增加系统的可维护性。
10.继承(extends)
(1)继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖、组合、聚合等。
(2)object类
(3)super:调用父类的构造方法,必须要在子类构造器的第一个;必须只能出现在子类的方法或者构造方法中;super和this不能同时调用构造方法。
11.方法重写:前提:需要有继承关系,子类重写了父类的方法
特点:(1)方法名必须相同
(2)参数列表必须相同
(3)方法体不同
(4)修饰符范围可以扩大:父类的private->public
(5)抛出的异常范围可以被缩小,但是不能扩大
(1)静态方法:方法的调用只和左边,定义的数据类型有关
(2)非静态方法:子类重写了父类的方法;重写的关键词是public
为什么需要重写?
(1)父类的功能子类不一定需要,或者不一定满足
Alt+insert:override
12.多态:即同一方法可以根据发送对象的不同而采用多种不用的行为方式。
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)
(1)多态是方法的多态,属性没有多态
(2)父类引用指向子类对象 。 father f1 = new Son();
(3)对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
(4)父类型可以指向子类,但是不能调用子类独有的方法
(5)如果方法是static、final、private,就不能重写
13.instanceof和类型转换
instanceof:判断两个类之间的关系
(1)前提:父类引用指向子类的对象
(2)把子类强行转换为父类,可能丢失自己本来的一些方法
(3)父类转换为子类,需要强制转换
Person obj = new Student();
Student student = (Student) obj;
studeng.go();
(4)方便方法的调用,减少重复的代码,使代码变简洁
14.static
只执行一次,顺序:静态代码块、匿名代码块、构造方法
15.抽象类:abstract
(1)抽象方法,只有方法名字,没有方法的实现
public abstract class Action{
public abstract void doSomeThing();
}
(2)单继承。(接口可以多继承)
(3)不能new抽象类,只能拿子类去实现它,约束!
(4)抽象类里可以有普通方法,有抽象方法的一定是抽象类
抽象类存在构造器吗?:抽象类可以有构造方法,但是不能直接创建抽象类的实例对象
抽象类存在的意义是什么?:被子类继承;提高开发效率。
16.接口:自己无法写方法,只有规范。专业的约束;约束和实现分离;面向接口编程
(1)interface
//interface 定义的关键字,接口都需要实现类
public interface UserService {
//接口中的所有定义的方法其实都是抽象的
void add(String name);
void delete(String name);
void update(String name);
void quary(String name);
}
public interface TimeService {
void timer();
}
//类 可以实现接口 implements 接口
//实现了接口的类 需要重写接口中的方法
//利用接口实现多继承
public class UserServiceImpl implements UserService,TimeService{
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void quary(String name) {
}
@Override
public void timer() {
}
}
(2)作用:
<1>约束
<2>定义一些方法,让不同的人实现
<3>方法都是public abstract
<4>常量都是public static final
<5>接口不能被实例化,接口中没有构造方法
<6>implements可以实现多个接口
<7>必须重写接口中的方法
17.内部类:在一个类的内部再定义一个类
(1)成员内部类
(2)静态内部类
(3)局部内部类
(4)匿名内部类
学习笔记,学习视频来自【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili