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

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

抽象方法:方法名前有abstract修饰,且方法没有方法体,即{},不需要实现任何功能,只是声明

1.抽象类中的方法有两种:

(1)抽象类中的普通方法,可以不必实现

(2)抽象方法,所属的抽象类被继承后,抽象方法必须被重写,除非是被抽象类继承,不必被

抽象类必须被继承,且抽象类不能被实例化,即抽象类A ,不能定义 A a=new A() ;

  1. package Interface;
  2.  
  3. /**
  4. * Created by wyy on 2017/2/25.
  5. */
  6. public class abstractTest {
  7.  
  8. public static void main(String[] args) {
  9. Person s = new Students(); //引用Students的对象
  10. Person t = new Teacher();//引用Teacher的对象
  11. s.f();
  12. t.f(); //我是一个学生 我是一个老师
  13. }
  14. }
  15. abstract class Person {
  16. public abstract void f(); //声明一个抽象类
  17. }
  18.  
  19. class Students extends Person { //类Students继承抽象类
  20. public void f() {
  21. System.out.println("我是一个学生");
  22. }
  23. }
  24.  
  25. class Teacher extends Person { //类Teacher继承抽象类
  26. public void f() {
  27. System.out.println("我是一个老师");
  28. }
  29. }

二. 接口(B implements interface A)

实现接口的类,必须要实现接口内定义的所有方法.

先定义一个接口类Like

  1. package Interface;
  2.  
  3. /**
  4. * Created by wyy on 2017/2/22.
  5. */
  6.  
  7. public interface Like{
  8. public void a();
  9. public void b();
  10.  
  11. }

接口类 Hate

  1. package Interface;
  2.  
  3. /**
  4. * Created by wyy on 2017/2/22.
  5. */
  6. public interface Hate {
  7. public void c();
  8. public void d();
  9.  
  10. }

实现这两个接口,必须实现接口内的所有方法:

  1. public class A implements Like,Hate {
  2.  
  3. @Override
  4. public void a(){
  5. System.out.println("this is a");
  6. }
  7.  
  8. @Override
  9. public void b() {
  10. System.out.println("this is b");
  11.  
  12. }
  13. @Override
  14. public void c() {
  15. System.out.println("this is c");
  16. }
  17.  
  18. @Override
  19. public void d() {
  20. System.out.println("this is d");
  21.  
  22. }
  23. }

三. 构造方法和类方法

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

 

java基础知识6-- 抽象类,抽象方法,接口,构造方法,类方法等易混淆的知识点的更多相关文章

  1. Java基础知识(抽象类和接口)

    一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法的声明格式为: 1 abstract void fun(); 抽象方法必须用abst ...

  2. JAVA核心技术I---JAVA基础知识(抽象类和接口)

    一:抽象类 (一)定义 类:属性(0或多个)+方法(0或多个)一个完整(健康)的类:所有的方法都有实现(方法体)类可以没有方法,但是有方法就肯定要有实现,这才是一个完整的类一个完整的类才可以被实例化, ...

  3. java基础知识总结--继承和接口

    什么是继承?什么是接口?他们之间的区别和联系是什么? 什么是继承? 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能.多个类中存在相同属性和行 ...

  4. 十、Java基础---------面向对象之抽象类与接口

    抽象类(abstract)     当编写一个类时,时常会为该类定义一些方法,这些方法的使用用以描述该类的行为方式,那么这些方法都有具体的方法体.但是在某些情况下,某个父类只是知道子类应该包含怎样的方 ...

  5. Java基础系列--06_抽象类与接口概述

    抽象类 (1)如果多个类中存在相同的方法声明,而方法体不一样,我们就可以只提取方法声明. 如果一个方法只有方法声明,没有方法体,那么这个方法必须用抽象修饰. 而一个类中如果有抽象方法,这个类必须定义为 ...

  6. 【java基础 16】抽象类和接口的区别

    导读:前两天闲着没事儿,看了本书,然后写了点代码,在接口里面写了默认方法实现,因为书上说这个特性是从java8开始的,我还特地给测了一下java7. 没过几天,就有一个技术分享会,刚好也是讲java8 ...

  7. Java基础5:抽象类和接口

    本文主要介绍了抽象类和接口的特性和使用方法. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 文章首发于我的个人博客: https://h2pl.g ...

  8. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  9. Java 基础知识(一)

    Java基础知识篇: 一.关键字解释 1. final:修饰非抽象类,非抽象方法和属性, 以及修饰方法参数,代表“无法改变的”.出于对设计或者效率的考虑使用该关键字. final类无法被继承,fina ...

随机推荐

  1. SQL语句查询某字段不同数据的个数(DISTINCT 的使用)

    今天做了一个题,学到了一个知识点: 有一个高速收费表VF,如下: 统计收费涉及的车辆有多少: SQL语句: SELECT  COUNT(DISTINCT  VchReg)  from  VF ; 其中 ...

  2. 20个开发人员非常有用的Java功能代码

    本文将为大家介绍20个对开发人员非常有用的Java功能代码.这20段代码,可以成为大家在今后的开发过程中,Java编程手册的重要部分. 1. 把Strings转换成int和把int转换成String ...

  3. 一句话搞定-phpStudy安装yaf扩展

    首先下载phpStudyX64位的,然后傻瓜式安装,安装完下载yaf,由于yaf扩展的网站在国外很难下载,需要FQ,所以我这里下载了yaf5.6nts.zip,解压后把php_yaf.dll这个文件粘 ...

  4. 文本排序的王者:玩透sort命令

    本文目录: 1.1 选项说明 1.2 sort示例 1.3 深入研究sort sort是排序工具,它完美贯彻了Unix哲学:"只做一件事,并做到完美".它的排序功能极强.极完整,只 ...

  5. DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络

    介绍 DeepLearning课程总共五大章节,该系列笔记将按照课程安排进行记录. 另外第一章的前两周的课程在之前的Andrew Ng机器学习课程笔记(博客园)&Andrew Ng机器学习课程 ...

  6. 权限大全-linux基础

    一.文件权限 (1)文件的权限主要针对三类对象定义: u:属主,owner    g:属组,group    o:其他,other    权限有三种:    r:可读    w:可写    x:可执行 ...

  7. 【渗透课程】第二篇下-HTTP协议的请求与响应深度剖析

    [渗透课程]第二篇下-HTTP协议的请求与响应深度剖析 HTTP1.1目前支持以下7种请求方法: 常见的MIME类型如下: 第一个数字有五种可能的取值: 目录 什么是请求方法?什么是请求头? HTTP ...

  8. 十条最有效的PCB设计黄金法则

    十条最有效的PCB设计黄金法则 尽管目前半导体集成度越来越高,许多应用也都有随时可用的片上系统,同时许多功能强大且开箱即用的开发板也越来越可轻松获取,但许多使用案例中电子产品的应用仍然需要使用定制PC ...

  9. HandlerThread实现数字时钟

    1.描述 刚看完Android多线程编程,对HandlerThread比较感兴趣,趁热巩固练习,实现一个了数字时钟,希望对学习HandlerThread有所帮助.如下: 启动一个HandlerThre ...

  10. Kosaraju算法详解

    Kosaraju算法是干什么的? Kosaraju算法可以计算出一个有向图的强连通分量 什么是强连通分量? 在一个有向图中如果两个结点(结点v与结点w)在同一个环中(等价于v可通过有向路径到达w,w也 ...