1. 封装
程序设计追求“高内聚,低耦合”。高内聚就是类的内部数据细节自己完成,不允许外部干涉;低耦合就是仅暴露少量的方法给内部使用。
通常,应禁止访问一个对象中数据的实际表示,而是通过操作接口来访问,称为封装。
封装核心:private get,set方法
意义:1.提高程序的安全性,保护数据
2.隐藏代码的实现细节
3.统一接口
4.系统可维护性增加
示例:
2. 继承
在Java中,所有的类,都默认或间接继承Object,Java中只有单继承没有多继承
super注意点:
VS this:
方法重写:
需要有继承关系,子类重写父类的方法,方法体不同。
为什么需要重写:
父类的功能,子类不一定能够满足或不一定需要
Alt+Insert:override;快捷键
3. 多态
多态是同一方法可以根据发送对象的不同而采取多种不同的行为方式。调用的方法并不是在编译期决定的,而是根据运行时实际引用的对象类型来决定真实调用的方法
Object object = new B(); //System.out.println(X instanceof Y);判断有没有父子关系 System.out.println(object instanceof B);//true System.out.println(object instanceof Object);//true System.out.println(object instanceof A);//true System.out.println(object instanceof String);//false A a1 = new B(); System.out.println(a1 instanceof B);//true System.out.println(a1 instanceof Object);//true System.out.println(a1 instanceof A);//true // System.out.println(a1 instanceof String); 编译出错
向上转型(低转高):子类转换成父类,可能为丢失子类本身的方法
向下转型(高转低):父类转换成子类,强制转换
//高 低 A father = new B(); B son = (B) father; ((B) father).eat(); //强制转换 父类转换成子类
public abstract class Demo03 { public abstract void aVoid();//抽象方法 public void bVoid(){};//普通方法 public Demo03() {}//构造方法 } class Demo04 extends Demo03{ @Override public void aVoid() { System.out.println("继承抽象类并实现抽象方法"); } }
接口就是规范,定义的一组规则,oop的精髓就是对对象的抽象,最能体现这一点的就是接口。
//接口只有方法的定义 public interface Demo05 { void aVoid(String str); void bVoid(); } interface Demo06{ int aInt(int a); int bInt(); } //利用接口实现多继承 class Demo56imp implements Demo05,Demo06{ @Override public void aVoid(String str) { } @Override public void bVoid() { } @Override public int aInt(int a) { return 0; } @Override public int bInt() { return 0; } }
public class Outer { public static void main(String[] args) { Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); //通过外部类实例化内部类 //匿名内部类 System.out.println(new One().anInt); new Two() { @Override public void aVoid() { } @Override public void bVoid(String str) { } }; } private int id = 100; public void aVoid(){ System.out.println("外部类"); } public void method(){ class InnerJu{ public void in(){ System.out.println("局部内部类"); } } } class Inner{ public void bVoid(){ System.out.println("内部类"); } //获得外部类的私有属性 public void getID(){ System.out.println(id); } } } class One{ int anInt = 90; public void aVoid() {} } interface Two{ void aVoid(); void bVoid(String str); }
new接口时必须把抽象方法全部实现。