多态
今日学习多态:
回顾
day06开始
用类来描述现实中的事物
属性 为变量
行为 为函数
访问方式
1.一个类 成员之间 直接访问,可以自己调用自己,需要结束条件
2.两个类访问
方式一 创建对象 类名 对象名 new 构造器 Car car = new Car();
NEW 出来堆内存空间独立 不受影响
借得话 一个地址值,指向同一个区域,修改 后互相影响
方式二 声明静态
成员变量 与局部变量
1声明位置,
2.内存位置
3.默认值
byte shaot int long 0
boolean folase
double float 0.0
String null
4.声明周期
Object 上帝类
匿名对象:调用属性没有意义,
当函数只调用一次
new Car().color = "green";
数据的安全性 private
开发中不允许逻辑判断
get set
重名 this.成员变量
实体类
书写规范
1.私有化属性,get和set函数
2.重写tostring 函数 ,目的便于测试
3.按需提供构造器,并提供空参构造器
(多个构造器是以重载方式 存在 参数不一样)
Overide重写
Overload 重载
this()进行构造器之间的调用
构造代码块 为所有对象初始化 在new关键字 才会触发
静态static
1.被static 修饰之后 随字节码 一起加载
2.共享数据
3.类名.成员名 访问方式多了一种
弊端
1.静态成员 不能访问 非静态 ,而非静态成员 是可以访问静态成员的
2.声明周期太长了
this 当前
super 父类
继承 子类可以获取父类中的所有非私有成员
类与类的关系,单继承关系,支持多层继承
父类 范围大 子类功能强大
只有B是A的一员 ,B 才可以继承A
局部变量
成员变量this.
父类 super.
重写一摸一样(除了形参)
每一个子类的构造器 第一条默认语句 super()
抽象 abstract
1.抽象函数必须位于抽象类中
2.抽象不能创建自己的对象
3.抽象类可以强迫子类做事情
抽象类与普通类
1.都有构造器 但是抽象类不能创建自己的类型对象
2.抽象类中既有抽象函数,又有普通函数
3.抽象类可以强迫子类做事情
接口 interface
今日学习多态
多态:同一个事物的多种表现形式,
正常 类与类的访问
A a = new A();
静态函数 只能访问 静态函数,
前提:
1.有继承
2.有重写
3.向上转型:
父类类型的变量 来接收子类对象的引用
向上转型弊端,向上转型后,不能使用子类特有的功能(自动类型转化)
为了实现子类的特有功能
我们采用向下转型:
向下转型:(强转)
子类变量来接受父类变量
前提:父类变量 是由向上转型得到的,
Animal animal1 = new Dog();向上转型
animal1.eat();
Dog dog =(Dog)animal1; 向下转型
dog.show();
instanceof:判断前面的对象是否是后面这个类的类型
编译看左边,运行看右边,
多态指的是函数,不是属性
四个关键字
权限修饰符:
private 同一个类
default 同一个包
proteced 为不在同一个包下的 子类提供了一种访问父类成员的方式
public 都可以
private String name;
int age;
proteced double weight;
public double height;
同一个包下的两个类之间
1.除了私有private 其他都可以访问
不同包下的两个类之间
1.private 不能访问
2.default 不能访问
3.protected 不能访问
protected Object clone() 克隆
创建并返回此对象的一个副本。
boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。
protected void finalize() 回收前 执行的函数
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
Class<?> getClass() 获取字节码文件
返回此 Object 的运行时类。
int hashCode() 十进制值得地址
返回该对象的哈希码值。
String toString()
返回该对象的字符串表示。
线程
void notify()
唤醒在此对象监视器上等待的单个线程。
void notifyAll()
唤醒在此对象监视器上等待的所有线程。
void wait()
在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。
void wait(long timeout)
在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
void wait(long timeout, int nanos)
在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
字节码文件获取的三中方法
1.Object类 Class getClass(); 获取
2.所有的类 包括基本数据类型 和 void 在内 都有一个静态隐藏属性 .classs
3.Class 类中
Classs claszz = static Classs forName (String className)
String toString()
System.out.println(“a =”+a);
System.out.println("a.toString() ="+ a.toString());
toString打印 全类名
获取类的全类名
boolean equals(Object obj)
equals
Object 中的equals默认使用 == 进行比较
String 类重写 equals
比较 先进行基本类型 == 比较
引用数据类型比较 需要重写equals
实体类 :
书写规范 :
1. 私有化属性,提供get与set函数
2. 重写 toString 函数 , 目的便于测试
3. 按需提供构造器,并提供空参构造器
4.唯一性原则 重写hashCode 和 equals函数
5.
6.
浙公网安备 33010602011771号