抽象函数,抽象类
特点:
1、抽象方法一定定义在抽象类中,都需要abstract修饰
2、抽象类不能实例化
3、只有子类覆盖了所有的抽象方法后,子类就可以创建对象;如果子类没有覆盖抽象方法,子类还是一个抽象类。就是强制让子类具备父类的方法
抽象类也是不断的向上抽取来的。抽取了方法的声明而不确定具体的方法内容,由不同的子类来确定方法的主体内容
------------------------------------------------------------------------------------------------------
抽象类中有构造函数吗--->有,抽象类构造函数虽然不能给抽象类对象实例化,因为抽象类不能创建对象。但是抽象类有子类,它的构造函数可以给子类的对象实例化
抽象类和一般类的区别:
相同:都是用来描述事物,都可以进行属性和行为的描述
不同:抽象类描述事物的信息不具体。一般类描述事物的信息具体
代码的不同:抽象类中可以定义抽象方法,一般类不同;抽象类不可以实例化,一般类可以
报错:非法的修饰符组合),private(子类就不能直接访问,也就无法覆盖),static(静态方法会在方法区内加载,也就是不需要对象的存在,类名就可以调用该方法,但是抽象方法调用是没有意义的)
------------------------------------------------------------------------------------------------------
接口:抽象类的特殊情况--抽象类中所有的方法都是抽象的,就是接口
定义接口用关键字interface
interface Inter{
public abstract void show1();
public abstract void show1();
}
接口中常见的成员有两种:1、全局常量2、抽象方法;而且都有固定的修饰符。public abstract final都是默认的,可以不写。
1、接口不能实例化,有抽象方法
2、需要覆盖接口中所有抽象方法的子类才可以实例化。否则该子类还是一个抽象类
3、接口是用来被实现的,implements
------------------------------------------------------------------------------------------------------
接口解决了什么问题呢--->可以多实现,解决了多继承 调用不确定性的问题;避免了单继承的局限性,因为一个类可以继承一个类的同时,还可以实现多个接口。
接口与抽象类的区别:
类是用于描述事物的共性的基本功能;接口是用于定义事物的额外功能
类与类之间是继承关系,is a
类与接口之间是实现关系,like a
抽象类中可以定义抽象和非抽象方法,子类可以直接使用,或者覆盖使用。想要避免,必须要进行判断,判断一个对象是否匹配某一类型,需要使用关键字instanceof:对象 instanceof 类型
接口中定义的都是抽象方法,必须实现才能用
多态在程序中的体现就是父类的引用或者接口的应用指向了子类的对象
多态的好处:提高了代码的扩展性
多态的弊端:不能使用子类的特有方法
多跳的前提
1、必须有关系,继承和实现
2、通常有覆盖
向上转型好处:隐藏了子类型,提高了扩展性
弊端:只能使用父类的功能,不能使用子类特有的功能,功能被限定了。如果不需要面对子类型,通过提高扩展性,或者使用父类的功能即可完成操作,就可以使用向上转型。
向下转型的好处:可以使用子类型的特有功能
弊端:必须要面对具体的子类型。向下转型有风险,可能会出现类型转换异常。只要转换类型和对象不匹配就会发生。
特点:
1、抽象方法一定定义在抽象类中,都需要abstract修饰
2、抽象类不能实例化
3、只有子类覆盖了所有的抽象方法后,子类就可以创建对象;如果子类没有覆盖抽象方法,子类还是一个抽象类。就是强制让子类具备父类的方法
抽象类也是不断的向上抽取来的。抽取了方法的声明而不确定具体的方法内容,由不同的子类来确定方法的主体内容
------------------------------------------------------------------------------------------------------
抽象类中有构造函数吗--->有,抽象类构造函数虽然不能给抽象类对象实例化,因为抽象类不能创建对象。但是抽象类有子类,它的构造函数可以给子类的对象实例化
抽象类和一般类的区别:
相同:都是用来描述事物,都可以进行属性和行为的描述
不同:抽象类描述事物的信息不具体。一般类描述事物的信息具体
代码的不同:抽象类中可以定义抽象方法,一般类不同;抽象类不可以实例化,一般类可以
抽象类一定是父类吗--->是的,由于抽象类不能实例化,只能依赖于子类覆盖其抽象方法后才能被实例化。
抽象类中可以不定义抽象方法吗--->可以的。仅是为了让该类不能创建对象
报错:非法的修饰符组合),private(子类就不能直接访问,也就无法覆盖),static(静态方法会在方法区内加载,也就是不需要对象的存在,类名就可以调用该方法,但是抽象方法调用是没有意义的)
------------------------------------------------------------------------------------------------------
接口:抽象类的特殊情况--抽象类中所有的方法都是抽象的,就是接口
定义接口用关键字interface
interface Inter{
public abstract void show1();
public abstract void show1();
}
编译之后还是生成class文件。
接口中常见的成员有两种:1、全局常量2、抽象方法;而且都有固定的修饰符。public abstract final都是默认的,可以不写。
public static final int num=1;
1、接口不能实例化,有抽象方法
2、需要覆盖接口中所有抽象方法的子类才可以实例化。否则该子类还是一个抽象类
3、接口是用来被实现的,implements
------------------------------------------------------------------------------------------------------
接口解决了什么问题呢--->可以多实现,解决了多继承 调用不确定性的问题;避免了单继承的局限性,因为一个类可以继承一个类的同时,还可以实现多个接口。
继承是为了获取体系的基本功能,实现接口是为了扩展功能。
接口与接口之间的关系是继承的关系,子类实现的时候需要覆盖所有接口的方法,接口支持多继承
接口与抽象类的区别:
类是用于描述事物的共性的基本功能;接口是用于定义事物的额外功能
类与类之间是继承关系,is a
类与接口之间是实现关系,like a
抽象类中可以定义抽象和非抽象方法,子类可以直接使用,或者覆盖使用。想要避免,必须要进行判断,判断一个对象是否匹配某一类型,需要使用关键字instanceof:对象 instanceof 类型
接口中定义的都是抽象方法,必须实现才能用
多态在程序中的体现就是父类的引用或者接口的应用指向了子类的对象
多态的好处:提高了代码的扩展性
多态的弊端:不能使用子类的特有方法
多跳的前提
1、必须有关系,继承和实现
2、通常有覆盖
向上转型好处:隐藏了子类型,提高了扩展性
弊端:只能使用父类的功能,不能使用子类特有的功能,功能被限定了。如果不需要面对子类型,通过提高扩展性,或者使用父类的功能即可完成操作,就可以使用向上转型。
向下转型的好处:可以使用子类型的特有功能
弊端:必须要面对具体的子类型。向下转型有风险,可能会出现类型转换异常。只要转换类型和对象不匹配就会发生。