java基础知识6-- 抽象类,抽象方法,接口,构造方法,类方法等易混淆的知识点
2017-02-25 20:31
591 查看
一.抽象类和抽象方法 (B 继承 抽象类A)
抽象类:有抽象方法的一定是抽象类
抽象方法:方法名前有abstract修饰,且方法没有方法体,即{},不需要实现任何功能,只是声明
1.抽象类中的方法有两种:
(1)抽象类中的普通方法,可以不必实现
(2)抽象方法,所属的抽象类被继承后,抽象方法必须被重写,除非是被抽象类继承,不必被
抽象类必须被继承,且抽象类不能被实例化,即抽象类A ,不能定义 A a=new A() ;
二. 接口(B implements interface A)
实现接口的类,必须要实现接口内定义的所有方法.
先定义一个接口类Like
接口类 Hate
实现这两个接口,必须实现接口内的所有方法:
三. 构造方法和类方法
(1)构造方法,继承(super,this 关键字)
构造方法:方法名和类名相同,一般用于创建对象的时候就赋值,常用于 this.name=name
方法名与类名相同;
不要返回类型(例如return、void等);
不能被static、final、native、abstract和synchronized修饰,不能被子类继承。
父类的构造方法不能被子类调用,可以通过super语句调用父类的构造方法。
用super调用父类的构造方法必须遵守以下规则:
1. 子类的构造方法中不能直接通过父类的方法名调用父类的构造方法,使用super语句;
2. 加入在子类的构造方法中有super语句,它必须作为构造方法的第一条语句(同this语句)
(2)类方法:用static修饰的方法,可以用类名直接调用,不用创建实例载引用
四.方法重载和方法重写
(1)重载:overload 主要是针对类中同名的方法,但是其方法的参数类型,参数个数,参数顺序,返回数据类型不同,如: void method(),void method(int i),void method(int a,int b),String method();最常用的重载便是System.out.println()
其实就是一个类中有多个名字一样的方法,但是参数和返回值可能不一样。
(2)重写:子类覆盖父类的方法,或者实现借口的方法,其方法名称,参数个数,参数类型,返回数据类型必须完全一致,另:重写的方法抛出的异常不能比父类异常更广(至少相同或是其异常的子类)。
其实一句话就是:
方法重载:就是在同一个类中,方法的名字相同,但参数个数、参数的类型或返回值类型不同!
方法重写:它是指子类和父类的关系,子类重写了父类的方法,但方法名、参数类型、参数个数必须相同!
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载是一类中多态性的一种表现。
五.多态性
多态存在的三个必要条件
继承
重写(子类继承父类,但是有自己不同的方法处理)
父类引用指向子类对象
A extends B
B b=new A(); //父类引用指向子类对象
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
即:如果父类调用子类的方法,如果父类中没有该方法,则会报错
子类引用父类的方法用super,引用自己的方法用this,重写方法指方法内实现的可以与父类不同
后期补充完善~
抽象类:有抽象方法的一定是抽象类
抽象方法:方法名前有abstract修饰,且方法没有方法体,即{},不需要实现任何功能,只是声明
1.抽象类中的方法有两种:
(1)抽象类中的普通方法,可以不必实现
(2)抽象方法,所属的抽象类被继承后,抽象方法必须被重写,除非是被抽象类继承,不必被
抽象类必须被继承,且抽象类不能被实例化,即抽象类A ,不能定义 A a=new A() ;
package Interface; /** * Created by wyy on 2017/2/25. */ public class abstractTest { public static void main(String[] args) { Person s = new Students(); //引用Students的对象 Person t = new Teacher();//引用Teacher的对象 s.f(); t.f(); //我是一个学生 我是一个老师 } } abstract class Person { public abstract void f(); //声明一个抽象类 } class Students extends Person { //类Students继承抽象类 public void f() { System.out.println("我是一个学生"); } } class Teacher extends Person { //类Teacher继承抽象类 public void f() { System.out.println("我是一个老师"); } }
二. 接口(B implements interface A)
实现接口的类,必须要实现接口内定义的所有方法.
先定义一个接口类Like
package Interface; /** * Created by wyy on 2017/2/22. */ public interface Like{ public void a(); public void b(); }
接口类 Hate
package Interface; /** * Created by wyy on 2017/2/22. */ public interface Hate { public void c(); public void d(); }
实现这两个接口,必须实现接口内的所有方法:
public class A implements Like,Hate { @Override public void a(){ System.out.println("this is a"); } @Override public void b() { System.out.println("this is b"); } @Override public void c() { System.out.println("this is c"); } @Override public void d() { System.out.println("this is d"); } }
三. 构造方法和类方法
(1)构造方法,继承(super,this 关键字)
构造方法:方法名和类名相同,一般用于创建对象的时候就赋值,常用于 this.name=name
方法名与类名相同;
不要返回类型(例如return、void等);
不能被static、final、native、abstract和synchronized修饰,不能被子类继承。
父类的构造方法不能被子类调用,可以通过super语句调用父类的构造方法。
用super调用父类的构造方法必须遵守以下规则:
1. 子类的构造方法中不能直接通过父类的方法名调用父类的构造方法,使用super语句;
2. 加入在子类的构造方法中有super语句,它必须作为构造方法的第一条语句(同this语句)
(2)类方法:用static修饰的方法,可以用类名直接调用,不用创建实例载引用
四.方法重载和方法重写
(1)重载:overload 主要是针对类中同名的方法,但是其方法的参数类型,参数个数,参数顺序,返回数据类型不同,如: void method(),void method(int i),void method(int a,int b),String method();最常用的重载便是System.out.println()
其实就是一个类中有多个名字一样的方法,但是参数和返回值可能不一样。
(2)重写:子类覆盖父类的方法,或者实现借口的方法,其方法名称,参数个数,参数类型,返回数据类型必须完全一致,另:重写的方法抛出的异常不能比父类异常更广(至少相同或是其异常的子类)。
其实一句话就是:
方法重载:就是在同一个类中,方法的名字相同,但参数个数、参数的类型或返回值类型不同!
方法重写:它是指子类和父类的关系,子类重写了父类的方法,但方法名、参数类型、参数个数必须相同!
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载是一类中多态性的一种表现。
五.多态性
多态存在的三个必要条件
继承
重写(子类继承父类,但是有自己不同的方法处理)
父类引用指向子类对象
A extends B
B b=new A(); //父类引用指向子类对象
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
即:如果父类调用子类的方法,如果父类中没有该方法,则会报错
子类引用父类的方法用super,引用自己的方法用this,重写方法指方法内实现的可以与父类不同
后期补充完善~
相关文章推荐
- 【幻化万千戏红尘】qianfengDay09-java基础学习:接口,抽象类,抽象方法,多态,instanceof
- Java基础知识强化18:抽象类、接口的区别 和 抽象类可以不实现接口的全部方法
- JAVA基础--重载与重写,接口与抽象类,构造方法的作用,代码块的分类
- JAVA常用基础知识点[继承,抽象,接口,静态,枚举,反射,泛型,多线程.]
- JAVA基础知识:抽象类、接口
- Java基础——继承+子父类相关特点+Final关键字+抽象类+模板方法设计模式+接口
- Java基础知识强化37:StringBuffer类之StringBuffer的构造方法
- 黑马程序员 Java基础 面向对象:继承、final关键字、抽象类、模版方法模式、接口、多态、Object类
- 黑马程序员_Java基础_面向对象(继承、子父类变量和函数以及构造函数特点、final关键字、抽象类、模版方法模式、接口)
- Java基础知识强化86:BigInteger类之BigInteger概述和构造方法
- JAVA常用基础知识点[继承,抽象,接口,静态,枚举,反射,泛型,多线程...]
- Java基础知识整理(二)- 抽象类与接口
- java内接口,抽象类,继承实现的一些基础知识和实例
- JAVA常用基础知识点[继承,抽象,接口,静态,枚举,反射,泛型,多线程...]
- 黑马程序员——JAVA基础之抽象和接口 , 模版方法设计模式
- Java基础知识强化29:String类之String类构造方法
- Java基础知识整理二(抽象类、接口…
- java基础知识回顾之---java String final类构造方法
- java基础知识点之多态,接口,抽象类
- java基础知识3--抽象类,接口