super关键字
super是直接父类对象的引用,可以通过super来访问被子类覆盖的方法或属性。
final关键字
- 修饰变量 ——常量
- 修饰方法 ——该方法不能被子类重写,但是可以被重载
- 修饰类 ——不能有子类,不能被继承
封装
设计程序原则:高内聚,低耦合。
- 高内聚:类的内部数据细节自己完成,不允许外部干涉。
- 低耦合:仅暴露少量的方法给外部使用
封装的要求: - 类属性的处理:
1.一般使用private(除非本属性确定会让子类继承)
2.提供相应的get/set方法来访问相关属性。这些方法通常是pblic,从而提供对属性的读取操作(注意:boolean类型变量的get方法是 is 开头) - 一些只用于本类的辅助性方法可以说private
- 希望其他类调用的方法用public
多态
多态性是OOP中的一个重要特性,主要用来实现动态联编的。换句话说就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型的系统来说能提高系统的灵活性和扩展性。
java如何引用多态?
- 引用变量的两种类型:
编译类型(模糊,一般是父类),由声明的类型决定。
运行时类型(运行时,具体是哪个子类就是哪个子类),由实际对应的对象类型决定。
多态存在的3个必要条件
有继承,有方法重写,父类引用指向子类对象
package testDuotai;
public class Animal1 {
String str;
public void speak() {
System.out.println("普通动物的声");
}
}
class Cat extends Animal1{
public void speak() {
System.out.println("喵的声");
}
}
class Dog extends Animal1{
public void speak() {
System.out.println("汪的声");
}
}
class Pig extends Animal1{
public void speak() {
System.out.println("哼的声");
}
}
package testDuotai;
import to100.Animal;
public class testDuoTai {
public static void testDuotai(Animal1 a){
a.speak();
}
public static void main(String[] args) {
// Cat c=new Cat();
// Animal1 c1=c;
// testDuotai(c1);
Animal1 a=new Cat();
Animal1 b=new Dog();
Animal1 c=new Pig();
testDuotai(a);
testDuotai(b);
testDuotai(c);
}
}
向下转型:
抽象类
何为抽象类?
1.它是一种模板,为所有子类提供了一个通用模板,子类可以在这个模板基础上进行扩展。
2.通过抽象类避免子类设计的随意性。可以做到严格限制子类的设计,使子类之间更加通用。
最大的特点:将方法的设计和实现分离
要点:
- 有抽象方法的类只能定义为抽象类
- 抽象类不能实例化,即不能通过new来实例化抽象类
- 抽象类可以包含属性,方法,构造方法。但是构造方法不能用new来实例化,只能用来被子类调用。
- 抽象类只能用来继承
- 抽象方法必须被子类实现
package abstractClass;
public abstract class Animal {
public abstract void run();
public void breath(){
System.out.println("呼吸");
};
}
class Cat extends Animal{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("猫步小跑");
}
}
class Dog extends Animal{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("狗跑");
}
}
抽象方法中也可以包含普通方法:
run()方法也是多态,执行的结果取决于调用对象。