类和对象
类:抽象笼统的概念,用于描述具有相同特征行为的一类事物
例:学生是一个类
对象:类衍生出来的一个具体的个体,与自己的类有相同的特征和行为
例:二年级三班的李华是一个对象
类的构成:
- 一、属性:用于静态描述(特征)
学生的名字 年龄 性别
组成部分:修饰符 数据类型 属性名字 [= 值] []内不是必须有
/**
* public:修饰符 String:数据类型 name:属性名 =:赋值符 "XL":值
*/
public String name = "XX";
- 二、方法:用于动态动作行为(做事)
学生会睡觉 写作业 泡妞
组成部分:权限修饰符 [特征修饰符] 返回值类型 方法名 (参数列表) [抛出异常]{
方法体
} []内不是必须有
/**
* 李华的约会 public:权限修饰符 static:特征修饰符 boolean:返回值类型 date:方法名 (boolean isRain,boolean isRun):参数类表 throws Exception:抛出异常 {}:方法体
* @param isRun 媳妇有没有跑路 true:跑了抛出异常 false:没有
* @param isRain 是否下雨 true:取消约会 false:约会
* @return
* @throws Exception
*/
public static boolean date(boolean isRain,boolean isRun) throws Exception{
if (isRun) {
throw new RuntimeException("媳妇跟人跑了");
}
if (isRain) {
System.out.println("下雨啦 没约会成功");
}else {
System.out.println("约会成功");
}
return isRain;
}
类的创建:
public class Student {
// 姓名:李华
String name = "李华";
// 年龄:15
int age = 15;
/**
* 李华的约会 public:权限修饰符 static:特征修饰符 boolean:返回值类型 date:方法名 (boolean isRain,boolean isRun):参数类表 throws Exception:抛出异常 {
if (isRun) {
throw new RuntimeException("媳妇跟人跑了");
}
if (isRain) {
System.out.println("下雨啦 没约会成功");
}else {
System.out.println("约会成功");
}
return isRain;
}:方法体
* @param isRun 媳妇有没有跑路 true:跑了抛出异常 false:没有
* @param isRain 是否下雨 true:取消约会 false:约会
* @return
* @throws Exception
*/
public static boolean date(boolean isRain,boolean isRun) throws Exception{
if (isRun) {
throw new RuntimeException("媳妇跟人跑了");
}
if (isRain) {
System.out.println("下雨啦 没约会成功");
}else {
System.out.println("约会成功");
}
return isRain;
}
}
类的初始化:
//Student:类名(数据类型) student:对象名 =:赋值符号 new:初始化关键字 Student():Student类的构造方法
Student student = new Student();
// 给student对象设置姓名和年龄
student.name = "李华";
student.age = 15;
类和类之间的关系:
一、A is-a B 泛化(继承 实现)
java中继承为单继承 可以传递继承即A继承B,B继承C,那么A也继承了C
-
子类继承父类通过关键字 extends 实现
-
子类的对象可以调用父类中的(public protected)属性和方法,当作自己的来使用
-
子类可以添加自己的属性和方法
-
子类从父类中继承过来的方法不能满足子类需求,可以对方法进行重写(覆盖父类)的方法,重写的关键字
-
方法重写(override)
- 产生继承关系的类,子类重写父类方法
- 权限修饰符 子类可以大于等于父
- 特征修饰符 final static abstract
父类方法是final子类不能重写
父类方法是static子类不存在重写
父类方法是abstract子类必须重写
(抽象类可以不重写) - 方法名子类和父类必须保持一致
- 参数和父类必须保持一致
- 返回值子类必须小于等于父类
- 运行时 编译时
父类方法抛出运行时异常,子类方法不予理会
父类方法抛出编译时异常,子类抛出的编译异常个数小于等于父类
父类方法抛出编译时异常,子类抛出的编译异常类型小于等于父类
-
每个类都有继承类 有extends则继承该关键词后面的类,否则继承Object类,Object是所有引用类型的父类,Object没有父类
Object中的方法:- getClass:用来获取对象对应类的类映射(反射)
- hashCode :将对象在内存中的地址计算得到一个int整数
- equals :用来对比两个对象的内容
- clone:克隆对象:受保护的方法
- finalize:权限修饰符是protected,在对象被回收时默认调用的方法
- toString :打印输出时将对象变成一个String字符串
- notify:线程被唤醒
- notifyAll:所有线程被唤醒
- wait:线程进入挂起状态
-
子类中重写了父类方法 仍要调用父类方法 可用super关键字调用
public class Preson {
// 姓名
String name;
// 年龄
int age;
public void eat() {
System.out.println("人都会干饭!");
}
public void sleep() {
System.out.println("人都会睡觉!");
}
}
public class Student extends Preson {
// 语文成绩
int chineseScore;
public Student() {
this.name = "小明";
this.eat();
}
// 重写了父类(Preson)的sleep方法 满足子类(Student)的需求
public void sleep() {
System.out.println("学生要保证睡眠!");
}
}
二、A has-a B 包含(组合 聚合 关联)
-
组合:
人和大脑的关系
整体和部分的关系,不可分割,同时产生 同时消亡 -
聚合:
电脑和主板的关系
整体和部分的关系,创建时有可能时分开的 -
聚合:
人有汽车
整体和部分的关系,可以分割的 后来形成的
A use-a B 依赖(依赖)
- 不是整体和部分的关系,因为某一件事情产生了联系,临时组合在一起,事情一旦做完关系立即解散