Java进阶——Attention Day 4

Java进阶——Attention Day 4


OOP最后几个注意点。

1、final关键字
  • final关键字修饰的成员变量不可改变

  • final修饰成员变量有两种初始化方式

    • 声明同时初始化
    • 构造函数中初始化
  • final关键字也可以修饰局部变量,在使用之前初始化即可

  • final修饰的类不能被继承

    NOTE:使用一个不能被继承的类意义:可以保护类不能修改继承,可以控制滥用继承对系统造成的伤害。

2、多态

多态是同一个行为具有不同的表现形式或形态的能力。

多态的存在条件:

  • 继承或实现:在多态中必须存在有继承或实现关系的子类和父类
  • 方法的重写:子类对父类中的某些方法进行重新定义(重写)
  • 父类引用指向子类对象,父类类型:指子类对象继承的父类类型,或实现的父接口类型
父类类型 引用名 = new 子类类型();

然后通过 变量名.方法名()调用在子类中重写的方法。

多态的特点:

  • 多态情况下,子类和父类存在同名的成员变量时,访问的时父类的成员变量
  • 多态情况下,子父类存在同名的非静态成员方法时,访问的是子类中重写的方法
  • 多态情况下,子父类存在同名的静态成员变量成员方法时,访问的是父类的成员函数
  • 多态情况下,不能访问子类独有的属性和方法
3、向上转型&向下转型

向上转型:

//向上转型就是java多态的表现形式
//父类引用指向子类对象
//格式:
父类类型 引用名 = new 子类类型();

向下转型:

//向下转型的前提:必须是多态形式
//向下转型是父类向子类转换的过程,这个过程需要强制转换
//格式:
父类类型 father	= new 子类类型();
子类类型 变量名 = (子类类型 )father;

NOTE:向下转型后,可以调用子类独有的属性和方法

4、抽象类

由abstract修饰的类叫做抽象类
由abstract修饰的方法为抽象方法,抽象方法只有方法的定义, 没有方法体实现,用一个分号结尾;
一个类中如果包含抽象方法,该类应该用abstract关键字声明为抽象类;
如果一个类继承了抽象类,必须重写其抽象方法(除非该类也声明为抽象类)

普通类能写的内容抽象类也可以,比如成员变量,普通方法
抽象类可以写抽象方法,但是不一定要有抽象方法

抽象类不能自己实例化:

抽象类就是要给别的类去继承的,抽象类可以继承另外一个抽象类的

  • 当子类继承一个抽象类时,如果子类是一个普通类且父类有抽象方法,那么子类必须得实现父类的抽象方法,对于父类的普通方法,子类可以不重写。
  • 当一个抽象类继承另外一个抽象类时,这个抽象类可以选择重写父类的抽象方法,如果不重写,则需要后面的子类去重写。

抽象类继承抽象类:
抽象类继承抽象类,子类可以不重写父类的抽象方法。普通类继承抽象类后,如果抽象类已经实现了其父类的某些抽象方法,普通类可以不重写已经被实现的抽象方法。

5、接口

接口:更为抽象的抽象类,接口里只允许定义常量和抽象方法。

用interface创建接口:

public interface MyInterface {//接口使用interface表示,本质上还是一个抽象类
//接口中默认只允许定义常量和抽象方法
static final int id=123;//接口中的常量默认使用static final修饰
public abstract void hello();//接口中的方法默认使用public abstract修饰的 public
abstract可以省略
void world();
int add();
}

接口实现:

用implements去实现一个接口,实现类后缀使用Impl。

public class MyInterfaceImpl implements MyInterface{//通过implements关键字实现一个接,需要重写接口中所有的抽象方法
@Override
public void hello() {
System.out.println("hello");
	}
总结
接口多继承
@Override
public void world() {
System.out.println("world");
	}
@Override
public int add() {
return 10;
	}
}

总结:

  • 接口:接口中只允许定义常量和抽象方法
  • 接口中定义的变量默认使用static final修饰,所以static final可以省略
  • 接口中定义的方法默认使用public abstract修饰,所以public abstract可以省略
  • 接口不能实例化自己,只能通过子类对象访问方法
  • 一个类可以同时实现多个接口 使用逗号隔开,子类需要重写所有接口中的抽象方法
  • 一个接口可以继承多个接口,使用逗号隔开


PS:如有不足,敬请指正!😺

努力是很辛苦,不努力是很舒服,可是不快乐。

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值