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

 

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. 在使用pydelicious时出现HTTP Error 500: Internal Server Error的错误的解决方法:

    问题:在学习<集体智慧编程>的过程中,第二章中如果你遇到了pydelicious.PyDeliciousException: HTTP Error 500: Internal Server ...

  2. sizeof求类的大小

    用sizeof求类的大小,http://blog.csdn.net/szchtx/article/details/10254007(sizeof浅析(三)——求类的大小),这篇博文给出了非常详尽的举例 ...

  3. 一起来学linux:目录与路径

    p { margin-bottom: 0.25cm; line-height: 120% } 首先介绍目录相关的路径的表示法: 1 . 代表此目录 2 .. 代表上一层目录 3 – 代表前一个工作目录 ...

  4. 【踩坑】activiti工作流的svg-xml解析报错

    1.问题记录 工作流配置画模板的时候保存成功但是部署报错. IE下 activiti工作流解析xml报错 type "path" must be followed by eithe ...

  5. LaTeX的图片插入及排版

    LaTeX中一般只直接支持插入eps(Encapsulated PostScript)格式的图形文件, 因此在图片插入latex文档之前应先设法得到图片的eps格式的文件. UNIX下的各种应用软件都 ...

  6. string,char*,int 之间的转化

    c++中经常遇到string,char*,int之间的相互转化,今天就来整理一下. 以下是转载并修改的内容: 以下是常用的几种类型互相之间的转换 string 转 int先转换为char*,再使用at ...

  7. Sublime Text3自定义代码片段

    1.打开工具--插件开发--新建代码片段 会出现下图: 2.在<![CDATA[和]]>内写下你要的代码片段,注意的是代码片段要靠最左边. 3.设置快捷键,把下面tabTrigger标签的 ...

  8. Java基础---泛型、集合框架工具类:collections和Arrays

    第一讲     泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...

  9. WebSocket 连接关闭(代码:1006)

    前端WebSocket 连接关闭(代码:1006) function connect() { //判断当前浏览器是否支持WebSocket if ('WebSocket' in window) { w ...

  10. eclipse没有联想功能的解决办法

    1.我window->Preferences->Java->Editor->content assist 把 Enable auto activation 选项打上勾 :(如下 ...