Java面向对象——类和对象,接口,变量
Java面向对象——类和对象,接口,变量
#面对对象编程的本质就是:以类的方式组织代码,以对象的方式封装数据
何为类(对对象的抽象)
类是一组具有相同属性和行为的对象的抽象
声明类的关键字是 class
#面向对象程序设计的重点是类的设计类是对象的模板
何为对象(具体的事物)
对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体
在Java中,可以用关键字 new 来创建类的实例对象
#对象=数据+方法(操作代码)
#对象是类的实例
构造器(构造方法)
使用new关键字创建的时候,出了分配内存空间外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用
注意点:
- 方法名和类名相同
- 方法名前面没有返回值类型的声明
- 在方法中不能使用return语句返回一个值
#使用new关键字,本身是在调用构造器,构造器是用来初始化值
1、无参构造
一个类即使什么都不写,它也会存在一个构造器(构造方法)
2、有参构造
一旦定义了有参构造,无参构造就必须显示定义
#快捷键生成构造器:Alt+Insert–>Constructor–>ok(有参)/Select None(无参)
面向对象的三大特征
一、抽象
通过特定的实例(对象)抽取共同性质(共同的属性/行为(函数))后形成概念的过程
abstract
当在一个类用关键词 abstract修饰 ,则这个类变成抽象类;当在一个方法用关键词 abstract修饰 ,则这个方法变成抽象方法(只有方法名字,没有方法的实现);
注意:
1、抽象类的所有方法,继承了它的子类,都必须要实现它的方法
2、不能new这个抽象类,只能靠子类去实现它(只能new它的一些子类对象):约束!
3、抽象类中可以写普通方法,抽象方法必须在抽象类中
4、抽象类存在构造器,用于子类中 super 调用的
二、继承
extends
#Java中只有单继承,没有多继承
每一个类(子类/派生类)继承它前一个类(父类/基类)的所有特性(私有成员/受保护的/默认的无法继承:private/protected/default)
object类
在Java中,所有的类,都直接或者间接继承object
super
注意点:
-
super调用父类的构造方法(只有继承条件下才可使用)
*:super();调用父类的构造器,必须在子类的第一行,相当于“先父后子”
-
super只能出现在子类的方法或者构造方法中,且必须位于构造方法的第一行
-
super和this不能同时调用构造方法(均需要放在第一行)
this,本身调用者的这个对象,即本类/本对象的构造方法(无需继承关系也可使用)
方法的重写(非静态)
#重写都是方法的重写,与属性无关
#静态方法是类的方法,非静态方法是对象的方法
子类重写父类:
- 方法名必须相同,方法体不同
- 类型,名称,参数列表必须相同
- 修饰符:范围可以扩大但不能缩小:public>Protected>Default>private
- 抛出异常:范围可以被缩小但不能扩大
三、多态
注意点:
-
多态是方法的多态,属性没有多态
-
子类和父类,有关系(继承关系)
-
方法需要重写(子类重写了父类的方法,执行子类的方法)
某些方法不能被重写:
- static 属于类,不属于对象(实例)
- final 常量
- private 私有
-
父类引用指向子类对象 Father f1 = new Son();
instanceof
判断两个类之间是否存在父子关系
进行比较,必须是有关系(父子关系)的类,否则就会报错
static
被static关键字修饰的成员变量被称为___静态变量___,它可以被该类所有的实例对象共享。
非静态的方法可以调用静态方法中的所有东西;静态方法可以调用静态方法的东西,但是不能调用非静态的东西。
因为:static和类一起加载到内存中,main方法也是一个static的。
static的意思大概是:原本的java文件编译成class文件,如果有static关键字,就会一起加载进去初始化;没有的话,则需要new,创建一个实例对象,才会加载
#永久只执行一次
接口
interface
声明接口的关键字是interface,接口的本质是契约,接口只有规范!自己无法写方法~是专业的约束
接口中的所有定义其实都是抽象的 public abstract 。所以,接口中的方法定义,可以直接返回值类型+方法名(+参数)
接口都需要实现类,命名时末尾一般加 Impl,关键词 implement 。而且,实现了接口的类,就需要重写接口中的方法
内部类
成员内部类
内部类可以访问外部类的私有属性,私有方法等等
静态内部类
静态内部类不能直接访问外部非静态类的属性
局部内部类
一个Java类中可以有对个 class 类,但是只能有一个 public class类
匿名内部类
没有名字初始化类
回顾
局部变量
定义在方法中,必须进行声明和初始化
成员变量
1、实例变量
定义在类中(方法的外面),从属于对象
使用:new 类名();–>快捷键:Alt+回车
形式:类名 ---- = new 类名();
输出:System.out.println(类名.变量类型)
若不进行初始化
- 布尔值:默认为false
- 除了基本类型,其他的默认为NULL
- 数值类型,默认为0 0.0 等等
2、类变量
与实例变量相同,从属于类
例:static double salary = 2500.00
直接在main中输出 System.out.println(salary)
3、常量
final 常量名 = 值;
例:static final PI = 3.14 与 final static PI = 3.14 相同(即:修饰符不存在先后顺序)
命名原则
- 类变量/方法名/局部变量:首字母小写+驼峰原则
- 常量/类名:首字母大写+驼峰原则