java基础知识6-- 抽象类,抽象方法,接口,构造方法,类方法等易混淆的知识点

一.抽象类和抽象方法 (B 继承  抽象类A)

抽象类:有抽象方法的一定是抽象类

抽象方法:方法名前有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,重写方法指方法内实现的可以与父类不同
 
后期补充完善~

 

 

 

 

posted @ 2017-02-25 20:31  小丸子~  阅读(1690)  评论(0编辑  收藏  举报