抽象类中是有构造方法的(抽象类不可以实例化,但是却存在构造方法)。抽象类的构造方法是用来被子类调用的,抽象类中的私有普通方法想要调用,只能通过在抽象类中的构造方法中调用,然后在子类中的构造方法调用父类的构造方法完成。
//最大的银行卡账户父类
public abstract class User {
private String name;
private double balance;
private String bankType;
//这里有bankType,在父类中无法确定
public User(String name,String bankType)
{
balance=0;
this.name=name;
this.bankType=bankType;
}
public User(String name) {
this.name = name;
this.balance = 0;
}
}
//招商银行
public class UserMer extends User{
private static final String BANK_TYPE="招商银行";
//父类中没有子类的bankType信息,需要通过父类的super()方法传递
//如果不这样的话,在多态的情形下,要用父类的变量去获取子类的信息,
//即通过user.getBankType()是无法获取到的,会为空,除非在子类中对getBankType()重写。
public UserMer(String name) {
super(name,BANK_TYPE);
}
}
父类中没有子类的bankType信息,需要通过父类的super()方法传递,如果不这样的话,在多态的情形下,要用父类的变量去获取子类的信息,即通过user.getBankType()是无法获取到的,会为空,除非在子类中getBankType()重写。
常量声明常量是程序运行过程中不可以发生改变的量,对于那些无论创建多少次对象,值都不能改变的数据定义为常量。
public static final 属性类型 常量名称(所有名字大写)
public static final double PI=3.1415;
public static final Object OBJECT_TEST=new Object();
static修饰:成为类级别,如果不加static,每次在实例化对象的时候都会重新开辟一个空间,但值却都相同,所以加个static随着类加载,只加载一次,避免多次开辟空间,浪费资源。
final修饰:是因为不希望在程序运行时,该量的值还能发生改变,final表示最终的。
接口 接口是一种规范,以后在进行程序设计的时候,都是基于接口进行开发,因为在声明方法的时候,我们需要这个方法存在多变性,而且可以随着业务的改变,针对这个接口做具体的实现。
接口的定义:
1、接口其实就是一个特殊的抽象类,接口中只能有抽象方法
2、通过interface关键字来定义接口
3、接口也是一种引用数据类型,在类加载的时候回生成字节码文件
4、接口中的成员:抽象方法、常量。public final static 可以省略
5、由于接口中所有方法都是抽象的,所以关键字public和abstract可以省略掉
6、在接口中,是允许有多继承的
7、接口不能实例化对象,它的作用是用来被子类实现的 implements
8、接口中定义的抽象方法,在子类实现之后一定要进行重写
9、接口和抽象类都可以作为一个方法的返回值和参数,比如当返回值为接口的时候,返回值必须是一个接口的实例,即它的实现类。
接口在开发中的作用:
设计模式中提到在设计程序时,我们要面向接口开发,接口+多态 可以实现程序的可扩展性、灵活性
访问权限修饰符:
- public 公共的 可以在工程的任意位置对元素进行访问
- private 私有的 只能在本类访问
- 默认的 在本包或者是子包才能访问到(子类不同包不能访问)
- protected 受保护的 在本包或者是子包才能访问(子类不同包可以访问)![访问权限修饰符]
匿名内部类:
创建一个父类或者接口所对应的匿名对象,不仅只是在接口中可以实现匿名内部类
MyInterface myInterface1=new MyInterfaceImpl();//创建了一个子类实现的对象
//创建了一个匿名的对象 代码层面虽然new MyInterface() 但是接口仍然是不能实例化的 相当于创建了一个匿名对象
MyInterface myInterface=new MyInterface() {
@Override
public double getSum(double n1, double n2) {
return n1+n2;
}
};
System.out.println(myInterface.getSum(200,100));
类与类,类与接口以及接口与接口之间的关系
-
类与类
继承关系,只能单继承,但是可以多层继承 -
类与接口
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口 -
接口与接口
继承关系,可以单继承,也可以多继承
接口与抽象类的区别:
接口是一种特殊的抽象类
不同点:
- 接口没有构造方法,抽象类有构造方法
- 接口的成员变量只能是常量,抽象类的成员变量没有限制
- 接口里的方法只能是抽象方法,抽象类里的方法可以是普通方法也可以是抽象方法
- 接口中允许多继承,抽象类不能多继承
相同点:
- 都不能实例化对象
- 其抽象方法在继承或者实现后都必须重写