***面向对象总结:***
**1.类与对象**:世间万物皆对象
类:是同一类事务的统称
对象:具体存在的
**2.成员变量(类的属性)**:属性对应特点
成员方法(类的行为):方法对应行为
局部变量:在成员方法内定义的变量
局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误
**3.构造器**:构造方法是一个与类名同名的方法,对象的创建就是通过构造方法来完成的
类中会默认添加无参构造器
假设我们手动添加有参构造器,此时类中就不会自动添加无参构造器
**4.this和super:**
this:当前对象
super:父类对象
在子类构造器(无论有参还是无参)中,默认会在第一行添加super()来调用父类的无参构造器
注意:也可以调用父类有参构造器,合理填写super后面的参数即可
**5.OOP-extends**: 子类继承父类,会继承父类的所有非私有的属性和方法
1)不管有参无参,默认调用父类无参
2)如何设计父类?如何设计子类?
3)子类继承父类,构造方法的执行顺序?父---子
4)单继承,多重继承
**6.重写与重载**:
重写(覆盖):override:发生在子类和父类的关系上
当子类中含有和父类方法名相同,参数列表也相同的方法时,
返回值类型也必须一样
访问修饰符不能比原方法严格
重载:overload:方法名相同,但参数列表不同(指的是类型,顺序不同)
方法的重载与方法的访问修饰符以及返回值类型无关
**7.OOP-多态**:
多态需要和及继承联合使用,实现多态的话需要继承同一个父类
使用多态调用属性时:看对象的类型,对象的类型是什么,调用的就是那个类里边的
例:Animal cat1 = new Cat();
cat1是Cat类型的,用Animal父类来声明对象,用Cat子类来实例化对象
使用多态调用方法时:如果子类方法覆盖父类的方法,调用的就是子类的方法
向上转型:子类对象 - - > 父类对象
向下转型:父类对象 - - > 子类对象(强制类型转换)//编译期不会报错,而运行期会报错
//报java.lang.ClassCaseException 类转换异常
封装:
将所有属性私有化
注意:在面向对象的开发中,一般建议用封装的特性去编写实体类(即,将所有的属性私有化并提供get、set方法)
对象 instanceof 类:a instanceof B
表示判断该对象是否是该类的,或其子类的,实现类的实例
面向对象的三大特性:继承,多态,封装
**8.访问修饰符**
同类 同包不同类 不同包子类 不同包非子类
public
protected
default
private
封装:将所有的属性私有化(private)
getXXX和setXXX
**9.static和final**
static:
1.被static修饰的资源(属性,方法,代码块),可以直接用类名调用,无需创建对象
2.静态资源只有一份,所有的对象都共用这一个资源,如果一个对象修改了资源,
其他对象获取的就是修改以后的资源
3.静态资源不依赖于对象,依赖于类。静态资源在类加载的时候就被加载进来,优先于对象存在。
所以在静态方法中不能直接调用非静态的东西,因为非静态资源需要用对象调用,但是静态方法
加载时可能还没有对象
4.静态资源只加载一次
子类和父类各类代码块执行顺序:
父类静态代码块—子类静态代码块—父类代码块—父类构造方法—子类代码块—子类构造方法
final:final表示最终的,不能被修改
1.final修饰的类不能被继承,终类
2.final修饰的方法可以被继承,但不能被覆盖
3.final修饰的属性,必须手动给初始值(或者在构造方法中初始化),并且给定之后不能被修改
final通常和static联合起来使用,用来定义常量(final和static顺序没关系)
**10.抽象类和接口**
抽象类:用abstract修饰的类,表示一种抽象的类型
比如:下面的Animal动物类,动物就是一个抽象的概念,动物有很多种类型,此处不知道就是哪种类型
public abstract class Animal {}
用abstract修饰的方法,表示一种抽象的行为(只知道要做一件事情,但是还不知道具体怎么做)
比如:动物都有吃东西的行为,但是每种动物吃东西的行为不同,
所以在动物抽象类中无法确定具体怎么吃,此时吃东西的方法就可以定义成抽象的
public abstract void eat();
注意: 1.抽象方法没有方法体(没有{}大括号)
2.抽象类不能直接创建对象,必须通过子类创建
3.抽象类中既可以有抽象方法,也可以有非抽象方法
4.继承抽象类,需要实现抽象类中所有的抽象方法
建议:如果有哪些行为(方法)必须得让子类去做的话,可以把这些行为(方法)定义成抽象的,
这样的话,子类必须得实现这些行为(方法)
接口:interface修饰
没有具体的定义,也没有具体的行为,用来制定规则,通常被用于常用功能,便于日后维护和添加删除
生活中的接口:USB接口
interface Car{}定义了一个接口Car
注意:1.接口中所有的方法默认的都是 public abstract修饰的,也就是抽象方法
2.接口中不能有实现的方法(具体的方法)
3.实现接口使用的是implement关键字
4.实现接口必须实现接口中所有的抽象方法
5.接口不能直接new出对象,必须通过实现类去创建
6.一个类可以实现多个接口,中间用“,”隔开
7.接口不能实现接口
8.接口可以继承接口,而且可以继承多个接口,中间用“,”隔开
9.接口中的属性默认都是public static final修饰的,是一个常量
**11.参数的传递方式**
值传递
基本数据类型和String:传递的是数值
引用数据类型:传递的是对象的地址值
注意:Java中方法的参数传递,只有值传递,对于引用数据来说,地址值是不会改变的,
但是可以改变对象中的内容
**12.内部类:**
在类体里面定义一个类
1.成员内部类:在类的成员位置上定义一个类,相当于类的成员属性
1)成员内部类中既可以访问外部类的静态属性,也可以直接访问外部类的非静态的属性和方法
2)类方法中要想调用成员内部类中的属性,要先创建对象,通过对象调用属性
2.局部内部类:在类的局部(方法或者代码块)定义一个类
局部内部类可以访问外部类中的静态属性和方法,也可以访问外部类中的非静态属性和方法
3.匿名内部类:在类中定义一个没有名称只有类体的类(常用)
什么时候使用匿名内部类?
当使用抽象类或者接口时,如果不想定义子类或者实现类时,可以使用匿名内部类
创建抽象类或者接口对象
4.静态内部类(静态成员内部类):在类中定义一个前面加有static关键字的类,
相当于类的静态资源(静态属性或者方法)
创建一个类:属性,方法,get/set方法,有参无参构造方法,toString()方法
面向对象基础知识总结
最新推荐文章于 2021-04-19 09:09:26 发布