JAVA学习小结2
本周学习内容有:
- 多态
- 抽象类
- 接口
- 传参
- 权限修饰符
- 内部类
多态
多态就是某一个事物,在不同时刻表现出来的不同状态。
猫可以是一只猫,同时也是一只动物
Cat c=new Cat();
Animal a=new Cat();
多态其实就是向上转型
多态的前提:
a:要有继承关系。
b:要有方法重写。 其实没有也是可以的,但是如果没有这个 就没有意义。
c:要有父类引用指向子类对象。
我们通过多态去访问成员变量,访问的是父类的成员变量
(编译看左边,运行也看左边)
我们通过多态访问方法,访问的是子类的重写方法
(编译看左边,运行看右边)
我们通过多态访问静态方法。
(编译看左边,运行也看左边)
弊端:*
不能访问子类独有的方法
如果要使用子类的独有方法,可以向下转型:
Person为父类,Teacher,Student为子类:
Person p=new Student();
Student s=(Student)p;
s.talklove();//talklove为学生类的特有方法
注意:父类可以向下转型为子类,子类之间不能相互转型```
ClassCastException为报错:类型转换异常
抽象类
在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
抽象类由关键字abstract修饰,abstract可修饰方法和类。
抽象类的成员变量既可以是变量,也可以是常量。也有构造方法,用于子类访问父类数据的初始化。,其成员方法可以是抽象的也可以不是。
抽象方法 :强制要求子类做的事情。
非抽象方法 :子类继承的事情,提高代码复用性。
public abstract class Animal {
//
//abstract 抽象的 可以修饰方法,和类
int num=1;
public static final boolean B=false;
public Animal() {
System.out.println("抽象类的构造方法执行了");
}
public abstract void eat();
public abstract void sleep();
public void show(){
System.out.println("Animal中的show方法");
}
}
接口
为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现,将来哪些猫狗需要被培训,只需要这部分猫狗把这些额外功能实现即可
接口:inference,与class同级,接口内方法存在默认修饰符public abstract
implements 实现接口
接口支持多继承,类与接口间也可以实现多实现
接口中的方法都是抽象方法,除非加关键字default
接口里没有构造方法
接口中的成员变量全是公共的静态啊常量
public interface MyIntereface {
//接口中是用来定义一些扩展功能,而且接口里面不能定义非抽象方法,只能定义定义抽象方法
public abstract void fire();
// public void show(){}; 报错,接口中不能定义非抽象方法
void math(); //接口的方法前面存在默认的修饰符 public abstract 你可以省略不写
}
public class Cat extends Animal implements MyIntereface{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
@Override
public void sleep() {
System.out.println("猫白天睡觉");
}
public void catchMouse() {
System.out.println("猫抓老鼠");
}
@Override
public void fire() {
System.out.println("猫经过不断的学习会钻火圈了");
}
@Override
public void math() {
System.out.println("猫经过练习,会做算术了");
}
}
传参
传参内容较为简单,可以体现在之前学过的内容之中,需要说的是,如果形参为一个抽象类,那么应该传一个子类对象
权限修饰符
private(私有的) ,
默认缺省
protected(受保护的) ,
public(公共的)
(https://img-blog.csdnimg.cn/20181219183043593.PNG)
内部类
把类定义在其他类的内部,这个类就被称为内部类。在类A中定义了一个类B,类B就是内部类。内部类可以直接访问外部类的成员,包括私有。:外部类要访问内部类的成员,必须创建对象。
按照内部类位置分类
成员位置:在成员位置定义的类,被称为成员内部类。
局部位置:在局部位置定义的类,被称为局部内部类。
成员内部类的修饰符:
private 为了保证数据的安全性
static 为了方便访问数据
注意事项:
a:静态内部类访问的外部类数据必须用静态修饰。
b: 成员方法可以是静态的也可以是非静态的
B:成员内部类被静态修饰后的访问方式是:
格式: 外部类名.内部类名 对象名 = new 外部类名.内部类名();