面向对象--Day12
什么是面向对象
面向对象的本质是:以类的方式组织代码,以对象的组织(封装)数据。
认识角度:先有对象后有类;对象,是具体的事物;类是抽象的,是对对象的抽象
代码角度:先有类后有对象。类是对象的模板
回顾方法定义与方法调用
方法的定义
public 返回值类型 方法名(){方法体;};
修饰符 返回值类型 方法名(形式参数){方法名;return 方法值;}
break:跳出switch,结束循环和return的区别;
方法名:见名知意;
参数列表:(参数类型 参数名);
方法的调用
对象名.方法名();
递归;
静态方法static和类一起加载出来的
非静态方法与类实例化new之后存在的
静态方法与非静态方法不能相互调用
形式参数与实际参数要*一一对应
类的声明
关键词class
类与对象的创建
类是抽象的,需要实例化
类实例化会返回一个自己的对象
成员变量/属性
默认初始值:
-
数字:0
-
char:u0000
-
boolean:false
-
引用(基本数据类型8大):null
构造方法
无参构造:public 类名(){};
有参构造:public 类名(形参){this.成员变量=成员变量;};
-
必须和类的名字相同
-
必须没有返回类型,也不能写void
-
使用new关键字,必须要有构造方法;本质在于调用构造方法
-
有参构造:一旦定义了有参构造,无参就必须显示定义;
-
name指的是括号内形参;this.name是上面的成员变量;
封装性
高内聚,低耦合
高内聚就是类的内部数据操作细节自己完成,不允许外部干涉
低耦合就是仅仅暴露少量的方法外部使用
属性私有get/set
public 数据类型 get成员变量(){
return 成员变量;
}
public void set成员变量(形参){
this.成员变量=形参;
}
private只能在其类获取
继承性
继承是类与类的关系
子类有叫派生类;而父类又叫基类
子类继承父类,就会拥有父类的所有方法;用关键词extends表示
在java中,所有的类,都直接或者间接继承object(ctrl+h)
继承只能是单继承;就是一个子类只能有一个父类,但一个父类可以有多个子类
super与this
方法的重写
重写都是方法的重写,与属性无关
静态方法:父类的引用指向了子类(B b=new A();)调用的是B的方法;
方法的调用只和左边,定义的数据类型有关
重写:非静态方法、
不能被重写:
-
static 方法,属于类,它不属于实例;
-
final 常量;
-
private 方法;
子类重写父类的方法;
多态
对象能执行哪些方法,主要看对象左边的类型;
-
多态是方法的多态,属性没有多态;
-
父类与子类:有联系,类型转换异常:ClassCasException;
-
存在条件:继承关系,方法需要重写,父类引用指向子类对象
Father f1=new Son();
instance of与类型转换
instanceof 是判断是否有父子关系;
System.out.println(x instanceof y);
把子类转换为父类:向上转型;
把父类转换为子类:向下转换;强制转换(要转换的类型)对象或变量;
代码块
只执行一次静态代码块{ }
(赋初值)匿名代码块static{ }
静态导入包
import static java.lang.(Math.random);
抽象类
-
不能new这个抽象类,只能靠子类去实现它:约束;
-
有抽象类不一定有抽象方法,但有抽象方法一定是抽象类;
-
若要去继承抽象类,子类一定要有其方法或者子类是抽象类;
接口
只有规范(约束)
关键词interface
类实现接口 implements 关键字
实现接口的类,就需要重写接口中的方法或变成抽象类
利用接口实现多继承
接口中的所有定义的方法其实都是抽象的
成员变量是常量(public static final)
接口不能被实例化
内部类
成员内部类
-
可以通过外部类来实例化内部类(首先要Outer o1=new Outer(); Outer.Inner i1=o1.new Inner();)
-
可以获得外部类的私有属性;

浙公网安备 33010602011771号