类与对象[1]
- Java是面向对象的
- 汇编语言(面向机器)—— c语言(面向过程)—— java语言(面向对象)
- 类和对象的关系
- 类是抽象的,代表一类事物,比如人类,猫类...
- 对象是具体的,代表一个具体事物
类是对象的模板,对象是类的一个个体,实例
A[把猫的特征提取出来] --> B[猫类]
B --> C[对象/实例]
B --> D[对象/实例]
B --> E[...]
定义类
package包名;
class类名 extends父类 implements接口名{
成员变量;
构造方法;
成员方法;
}
成员变量
成员变量是类的一个组成部分,一般是基本数据类型,也可是是引用类型
创建对象
- 先声明再创建
- 对象申明:
类名 对象名
- 对象创建:
对象名=new 类名()
- 对象申明:
- 一步到位法
对象名=new 类名()
访问对象的成员变量
对象名.变量名;
成员方法
- 介绍
- 比如人类,除了有一些属性外(成员变量表示的 年龄,姓名...),还有一些行为,如说话,跑步...,通过学习还会做算术题
- 成员方法/函数--定义
- 参数列表:表示成员函数输入
- 数据类型(返回类型):表示成员函数输出
- 函数主体:表示为了实现某一功能代码块
public 返回数据类型 方法名(参数列表)
{
语句;//方法(函数)主体
}
- 成员方法--申明
public int test(int a);
//访问修饰符 数据类型 函数名(参数列表);
构造方法
- 特点
- 方法名和类名相同
- 没有返回值
- 创建一个类的新对象时,系统会自动调用该类的构造方法,完成对新对象的初始化
- 一个类可以有多个构造方法
- 默认构造方法
- 如果没写,系统默认
public Person(){}
- 如果没写,系统默认
- This
- this是属于对象的,不是属于类的
静态变量与静态方法
静态变量
- 定义语法
访问修饰符 static 数据类型 变量名;
//static表示静态变量,因此它可以被任何一个对象访问
2)访问类变量
类名.类变量名
//或者
对象名.类变量名
静态方法
- 定义语法:
访问修饰符 static 数据返回类型 方法名(){}
- 访问类方法:
类名.类方法名
//或者
对象名.类方法名
- java规则:
- 静态变量原则上用静态方法去访问
- 静态方法只能访问静态变量
- 非静态方法,既能访问静态变量,也能访问实例变量
- 总结:
- 静态变量是与类相关的,公共的属性
- 实例变量是属于每个对象个体的属性
四大特征
1. 抽象(可以不考虑)
定义一个类时,将一类事物的共同属性和行为提取出来,形成一个物理模型,这种研究方法称为抽象
2. 封装
将抽象出来的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法),才能对数据进行操作
- 访问控制修饰符
- 公开级别,public,对外公开
- 受保护级别,protected,对子类和同一个包中的类公开
- 默认级别,无修饰符,向同一个包的类公开
- 私有级别,private,只有类本身可以访问,不对外公开
访问级别 | 访问控制修饰符 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|---|
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | |
默认 | 无 | √ | √ | ||
私有 | private | √ |
- 包
- 三大作用
- 区分相同名字的类
- 管理类
- 控制访问范围
- 打包命令
- package com.xiaoming
- 命名规范: 小写字母
- 三大作用
3. 继承
解决代码复用:在父类中定义相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需通过extends语句来声明继承
class 子类 extends父类
这样子类就会自动拥有父类定义的部分属性和方法
- 注意事项
- 除了 private属性/方法,其他3类的属性/方法都能被继承
- 一个子类只能继承一个父类
- Java所有类都是object的子类
- JDK6中有202个包,3777个类、借口、异常、枚举、注释和错误
- 多查jdk帮助文档
-
方法重载(overload)
- 方法名相同
- 方法的参数类型,个数,顺序至少有一项不同
- 如果只是返回类型不同,不能构成重载
- 如果只是控制访问修饰符号不一样,不能构成重载.
-
方法覆盖(override)
- 子类的有一个方法,和父类的某个方法的名称、返回类型、参数一样,则称子类的这个方法覆盖了父类的那个方法
- 访问权限只能:子类>=父类
4. 多态
一个引用(类型)在不同情况下的多种状态。
继承是多态得以实现的基础
- 注意事项
- Java允许父类的引用变量引用它子类的实例(对象)
Animal animal=new Cat();
这种转换时自动完成的 - 好处:消除了类之间的耦合关系,使程序更容易扩展(见E:\Java\Homework\接口_卖汽车.txt)
- 新增一种类型汽车的销售,只需让新定义的类实现Car并实现它的所有方法,无需对原有代码做任何修改。CarShop类的sellCar(Car car)方法可以自动处理新的车型
- Java允许父类的引用变量引用它子类的实例(对象)
抽象类
当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]
- 注意事项
- 抽象类不能被实例化
- 抽象类不一定要包含abstract方法,即可以有实现了的方法
- 一旦某个类包含了abstract方法,这个类必须声明为abstract
- 抽象方法不能有主体:
abstract void aaa( );
接口
接口就是给出一些没有内容的方法,封装到一起,到某个类要使用的时候,再根据具体情况把这些方法写出来
Class 类名 implements 接口
{
方法;
变量;
}
- 注意事项
- 接口不能被实例化
- 接口中的所有方法都不能有主体(可以理解为:接口是更抽象的抽象类)
void aaa();
- 一个类可以实现多个接口
- 接口中可以有变量(但变量不能用private和protected修饰)
- 接口中的变量,本质是static,而且是final,不管你加不加static修饰
- 在java开发中,我们经常把常用的变量,定义在接口中,作为全局变量使用。
访问形式:接口名.变量名
- 一个接口不能继承其他的类,但是可以继承别的接口
- 实现接口vs 继承类
- 单继承:保证类的纯洁性
- 实现接口可以看作是对继承的一种补充
- 继承是层级式,不灵活
- 实现接口可以对某个类功能扩展,非常灵活
- 单继承:保证类的纯洁性
绑定
将一个方法调用同这个方法所属的主体(也就是对象或类)关联起来叫做绑定,分前期绑定和后期绑定
- 前期绑定
- 在程序运行之前就已经绑定,由编译器和连接程序实现,又叫做静态绑定。比如static方法和final方法。注意!这里也包括private方法。因为它是隐式final的
- 后期绑定
- 在运行时根据对象的类型进行绑定,由方法调用机制实现,因此又叫做动态绑定,或者运行时绑定。
final
- 作用:final可以修饰变量或者方法
- 当不希望父类的某个方法被子类覆盖(override)时,可以用那个final关键字来修饰(见com.test2.Demo5.java)
- 当不希望类的某个变量的值被修改,也可用final修饰。如果一个变量是final的,则必须赋初值
- 当不希望类被继承时,可用final修饰
- 规范:fianl用下划线命名
- 注意事项
- final修饰的变量又叫常量。一般用
xx_xx_xx
来命名 - 如果一个变量是final的,则必须赋初值
- final修饰的变量又叫常量。一般用
-
持续更新中~笔记记录自韩顺平Java网课 ↩
网友评论