封装
封装即隐藏具体实现细节对外仅暴露公共的访问方式
具体体现
- 私有是一种封装 被private 修饰后 调用时只能用set get方法修改查询
- 将代码抽取到方法中是一种封装
- 将变量定义到类中 是一种封装
类
类是现实世界中事务共同属性和行为的抽象,对象是对类的具体实现
-
构造方法
和类名一样 没有返回值 不能手动调用 由jvm虚拟机调用
private关键字
private关键字是修饰符 可以修饰成员变量和方法 被修饰后只能在本类中直接调用(对象名.的形式叫直接调用);
可以用setget方法调用
public class Demo{
//成员变量
private int i = 1;
private int b = 2;
//空参构造方法 当一个类中定义了有参构造方法 他自带的隐藏空参方法将会消失 需重新定义过
public void Demo(){};
//有参构造
public void Demo(int i,int b){
this.i = i;
this.b = b;
}
//setget方法
public void setI (int i){
this.i = i;
}
public void setB(int b){
this.b = b;
}
//get方法
public void getI(){
return i;
}
public void getB(){
return b;
}
}
成员变量和局部变量
继承
概念
class Son extends Father{}
this 和 super
-
this
- this.变量名调用的是此类中的变量
- this();本类的构造方法
- this.方法名();本类的成员方法
-
super
- super();父类的构造方法
- super.方法();父类的成员方法
- super.变量名 父类的成员变量
-
特点
- 造方法体中默认有一个super();空参构造
除非专门定义了父类的有参构造 - this()于super()必须再构造方法体的第一行
- 造方法体中默认有一个super();空参构造
访问权限
- private 私有的只能在类中使用
- 默认 可在同一个包中的类使用
- protected 可在不同中的子类使用
- public 可以在不同包中使用
方法重写
- 在继承体系中,子类出现了和父类一模一样的方法(方法名,参数类型,返回值)
- 与重载的区别,重载是在同一个类中,方法名
相同,参数不同(数据类型,参数顺序,参数内容)与返回值无关
优缺点
-
优点
- 提高了代码的复用性
- 提高了代码的维护性
- 让类于类产生了联系时多态的基础
-
缺点
- 使子类必须拥有父类的非私有成员
- 增加了代码的耦合性
多态
多态的概念
通一个事务在不同的时候表现出不同的形态,(伪代码演示 动物 a = new 猫(); 动物 b = new 狗();
多态的特点
- 成员变量
编译时看左边(父类中),运行时看左边
-
成员方法
编译时看左边(父类),运行时看右边(子类)
多态的好处和弊端
- 提高了程序扩展性
- 在方法中传入父类,即可使用子类中的方法
public void useB(class B){
B.method();
}
public class B{
}
public class A extends B {
public void method(){};
}
- 多条不能使用成员的特有方法
多态的转型
-
多态默认使用格式是向上转型 父类指向子类
-
当要调用子类方法时可以对多态进行向下转型
Cat z = (Animal) a;
- 当有多个类型时应该进行类型判断避免发生类型转换错误 classcastException
if (z instanceof Cat){
cat z = (Cat)a;
}
接口
- 概念
- 当一个方法中所有的方法都是抽象方法,可以定义为接口
- 定义格式
public interface Demo1{}
//实现类
public class Demo1Impl impl implements Demo1{}
- 特点
- 接口不能创建对象
- 接口的实现类必须重写接口的抽象方法、或自己也变成接口
- 接口可以多继承
- 接口的成员变量是常量 被public static final修饰
- 没有构造方法
- 只能由抽象方法(JDK8之前)
- JDK8新特性
- 可以定义普通方法
public default void method(){}
- 如果实现类实现多个接口 普通方法要重写
- 静态方法 一般用于工具类
public static void mehtod(){}
//调用
Demo1.method();
- 类和接口
- 类和类是继承关系,只能单继承,不能多继承
- 类和接口是实现关系,需要重写接口的抽象方法
- 接口和接口时继承关系,可以多继承
抽象类
-
含有抽象方法的类必须声明为抽象类
-
抽象方法
- 抽取到父类的方法无法定义具体的实现逻辑
为抽象方法 - 抽象方法没有方法体
- 抽取到父类的方法无法定义具体的实现逻辑
-
定义
-
public abstract class AbstractDemo{ public abstract void method(); }
-
特点
- 抽象类不能创建对象
- 抽象类有构造方法
- 抽象类可以没有抽象方法
- 抽象类的子类必须重写父类的所有抽象方法,或者也变成抽象类