一、final关键字
1、修饰的成员:
类:不能被继承
变量:是常量且只能赋值一次
方法:是不能被重写(可以被覆写)
引用数据类型的对象:不能改变其地址值,但可以改变去其属性值
引用数据类型图解
package qf22020218;
public class Demo06 {
public static void main(String[] args) {
Person person = new Person("小明");
person.name = "小李";
~~person~~ = new Person("你好呀");
System.out.println(person.name);
}
}
final class Person{
String name;
public Person(String name){
this.name = name;
}
}
3、在实际开发中final一般使用static关键字来进行搭配的使用,final是不能进行改变的,使用static修饰,直接通过类来进行访问
二、包名、访问修饰符
包
1、在不同包中可以创建相同的名称的类,可以防止相同类名的冲突
2、命名:域名+公司域名+项目名称+包的具体含义
3、包名全是小写
访问修饰符
注意:如果要禁止对象的创建可在构造方法上用private修饰,这样就不能在外部被创建
三、多态
1、多态的概念:
一个事物或者一个对象多种形态,就是多态
2、前提条件:必须在继承或者实现接口的前提下
3、特点:父类的引用指向子类的对象,多态访问成员的特点:并且编译看左边(父类),运行看右边(子类)
4、语法:父类类名 对象名 = new 子类类名();
代码演示:
package qf22020218;
public class Demo06 {
public static void main(String[] args) {
Animal06 animal06 = new Cat06();
animal06.eat("鱼");
}
}
class Animal06{
public void eat(String name){
System.out.println("吃"+name);
}
}
class Cat06 extends Animal06{
@Override
public void eat(String name){
super.eat(name);
}
}
5、多态的向上和向下转型
1、向上语法:父类 对象名 = new 子类(); 缺点:向上转型不能调用子类独有的语法
2、向下语法:子类 对象名 = new 子类(); 缺点:可能强制转换异常
向下转型问题解决:语法:父类的对象引用 instanceof 子类的类名
代码演示:
注意:必须向上转型过的子类才能向下转型,instanceof 才能为true
package qf22020218;
public class Demo06 {
public static void main(String[] args) {
Animal06 animal06 = new Dog();
//Animal06 animal06 = new Cat06();
//判断是否可以还原成子类
if(animal06 instanceof Cat06){
Cat06 cat06 = (Cat06)animal06;
cat06.run();
}else {
System.out.println("还原失败");
}
}
}
class Animal06{
public void eat(String name){
System.out.println("吃"+name);
}
}
class Cat06 extends Animal06{
@Override
public void eat(String name){
super.eat(name);
}
//子类独有的方法,只有子类的引用才可以调用
public void run(){
System.out.println("猫在跑");
}
}
class Dog extends Animal06{
}
结果: