zoukankan      html  css  js  c++  java
  • 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,重写方法指方法内实现的可以与父类不同
     
    后期补充完善~

     

  • 相关阅读:
    Gitlab安装与备份恢复
    Logstash使用grok插件解析Nginx日志
    SSH登录启用Google二次身份验证
    Nginx隐藏标识以及其版本号
    Nginx虚拟目录设置
    Tomcat虚拟目录设置
    sqlserver无法连接
    Howto: 如何将ArcGIS Server缓存移动到新服务器
    优酷网架构学习笔记
    .net中自定义过滤器对Response内容进行处理
  • 原文地址:https://www.cnblogs.com/alwayswyy/p/6442723.html
Copyright © 2011-2022 走看看