1/12笔记

1 Final

final是个修饰符,表示最终的,不可更改的

final修饰的类 不能被继承

final修饰的成员方法 不能被覆写

final修饰的变量,不能二次赋值,没有默认值,必须显示赋值

一般把final修饰的静态变量叫常量,也就是 public static final 数据类型 变量名 = 值;常量名全部大写

* * final修饰引用类型时,final修饰的变量不能更改,但是它里面保存的是地址,是地址不能变,但是地址里存的数据可以变。

2 多态

2.1 是什么

父类引用指向子类对象

父类引用:指的是 用父类声明的引用类型变量

指向:通过内存地址可以找到哪个对象

子类对象:new 子类 创建堆内存对象

子类 变量名 = new 子类();

Cat c = new Cat();

父类 变量名 = new 父类();

Animals a = new Cat();

2.2 相关知识

软件设计六大原则:

1)单一职责原则:功能单一,只拥抱一种变化

2)里氏替换原则:能使用父类的情况下,一定可以使用子类

3)依赖倒置原则:细节应该依赖抽象,抽象不应该依赖细节

4)接口隔离原则

5)迪米特原则:最少知识原则

6)开闭原则:对修改关闭,对扩展开放

2.3 优点

同一操作,作用于不同对象,可以有不同的解释,产生不同的结果,这就是多态性

当一件事,有多种不同实现方式的时候,我们选择依赖高层来拥抱多种变化,

本质还是降低类和细节之间的耦合度

2.4 缺点

多态缺点:丢失子类特有的属性

2.5 使用语法

多态进行属性调用:

1)只要父类没有,直接报错

2)父类有,子类没有,执行父类

3)父类有子类也有,成员方法执行子类(因为可以覆写),其他都执行父类(成员变量,静态方法等)

由于多态原因子类特有属性访问不到,想要访问,先向下转型

* * 必须先发生了向上转型,才能发生向下转型(否则会类型转换异常)

2.6 多态的几种形式

父类引用 指向 子类对象

1)直接多态     Sup sup = new Sub();

2)形参和实参,方法参数列表为父类类型,调用方法传入子类对象   m1(new Sub());

3)返回值多态,返回值类型是父类类型,但是返回子类对象   Sup result = m2();

2.7 Intanceof

判断某个对象是否由某个类实例化而来,

if(sup1 instanceof SubClass)

如果是 再向下转型,不是就不转,避免类型转换异常

3 abstract

3.1 是什么

abstract:修饰符,修饰的类 是抽象类,修饰的方法 是抽象方法

抽象类,不能实例化对象

抽象方法,没有方法体,只定义功能,没有功能的实现,并且抽象方法必须在抽象类中

反之,抽象类中,可以没有抽象方法

4 Interface

4.1 是什么

接口 可以理解为完全抽象的一个类,里面只有抽象方法和常量

从1.8开始允许出现静态方法和默认方法

语法 修饰符 interface 接口名{}

接口中的抽象方法,不需要加abstract修饰,方法 默认都是public abstract

接口中,没有变量,只有常量,并且public static final 可以省略

类和接口之间,不再是继承关系,变成了实现关系,extends换成implements

接口名 变量= new 子实现类()  也是会发生多态的

一个类只能继承一个类,但是可以实现N个接口,以逗号隔开,可以解决单继承功能变弱问题

class 类名 implements 接口1,接口2,接口3....{}

接口和接口之间,是多继承,多个 以逗号隔开

interface 接口名 extends 父接口名1,父接口名2...{}

一个类 如果实现了一个接口,那就是必须实现接口中所有的抽象方法,否则该类需要加abstract修饰(* *多实现,需要实现所有的抽象方法* *)

一个抽象类,实现一个接口,可以实现0~N个抽象方法

在1.7只能有抽象方法

在1.8可以有静态方法和default方法(理解为成员方法即可)

        静态方法,用接口名调用

        default方法,需要通过子实现类调用,可以覆写

在1.9支持private方法

5 Object

Object是所有类的祖类,是java中提供的根类

一个类没有显示继承另一个类的时候,默认继承Object

Object xx=new xxx()  : 是可以发生多态的

引用类型不能用==比较   

equals()  : 该方法设计目的,用来比较两个对象是否相等,但是,默认比较地址

java中Object里的equals方法默认比较内存地址(==) 需要我们根据需求重写

6 finalize

该方法会在垃圾被回收的时候自动调用

垃圾:当一个对象,没有更多引用指向他时,该对象被视为垃圾

程序员可以建议进行垃圾回收   System.gc(); 这样建议,未必听

7 toString

代表了当前对象的字符串表示形式

当我们打印一个引用类型变量时,会自动调用该对象的toString方法

Object中默认的toString方法 是打印该对象的内存地址(hash值),想输出具体值时需要覆写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值