关键词:
继承:
需要注意的是 Java 不支持多继承,但支持多重继承。
继承的特性
1.子类拥有父类非private的属性,方法。
2.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
3.子类可以用自己的方式实现父类的方法。
4.Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。
5.提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
关键字
1.final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
2.super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
3.this关键字:指向自己的引用。
4.使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
5.在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
构造器
子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。
如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。
例如:
class SuperClass { private int n; SuperClass(){ System.out.println("SuperClass()"); } SuperClass(int n) { System.out.println("SuperClass(int n)"); this.n = n; } } class SubClass extends SuperClass{ private int n; SubClass(){ super(300); System.out.println("SubClass"); } public SubClass(int n){ System.out.println("SubClass(int n):"+n); this.n = n; } } public class TestSuperSub{ public static void main (String args[]){ SubClass sc = new SubClass(); SubClass sc2 = new SubClass(200); } }
输出结果为:
SuperClass(int n) SubClass SuperClass() SubClass(int n):200
Java 重写(Override)与重载(Overload):
方法的重写规则
1.参数列表必须完全与被重写方法的相同;
2.返回类型必须完全与被重写方法的返回类型相同;
3.访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
4.父类的成员方法只能被它的子类重写。
5.声明为final的方法不能被重写。
6.声明为static的方法不能被重写,但是能够被再次声明。
7.子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
8.子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
9.重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
10.构造方法不能被重写。
11.如果不能继承一个方法,则不能重写这个方法。
重载(Overload)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则:
被重载的方法必须改变参数列表(参数个数或类型不一样);
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
无法以返回值类型作为重载函数的区分标准。
重写与重载的区别
总结:
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
(3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
Java多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作,多态性是对象多种表现形式的体现.
多态的优点:
1. 消除类型之间的耦合关系
2. 可替换性
3. 可扩充性
4. 接口性
5. 灵活性
6. 简化性
多态存在的三个必要条件:
1.继承
2.重写
3.父类引用指向子类对象(比如: Parent p = new Child())
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
实例如下:
abstract class Animal { abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("吃鱼"); } public void work() { System.out.println("抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨头"); } public void work() { System.out.println("看家"); } } public class Test { public static void main(String[] args) { show(new Cat()); // 以 Cat 对象调用 show 方法 show(new Dog()); // 以 Dog 对象调用 show 方法 Animal a = new Cat(); // 向上转型 a.eat(); // 调用的是 Cat 的 eat Cat c = (Cat)a; // 向下转型 c.work(); // 调用的是 Cat 的 work } public static void show(Animal a) { a.eat(); // 类型判断 if (a instanceof Cat) { // 猫做的事情 Cat c = (Cat)a; c.work(); } else if (a instanceof Dog) { // 狗做的事情 Dog c = (Dog)a; c.work(); } } }
输出结果:
吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠
多态的实现方式
方式一:重写
方式二:接口
方式三:抽象类和抽象方法
抽象类
1.抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
2.由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
3.父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
4.在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
抽象方法:
如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。
Abstract关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。
抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。
声明抽象方法会造成以下两个结果:
1.如果一个类包含抽象方法,那么该类必须是抽象类。
2.任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
Java 接口
接口与类相似点:
1.一个接口可以有多个方法。
2.接口文件保存在 .java 结尾的文件中,文件名使用接口名。
3.接口的字节码文件保存在 .class 结尾的文件中。
4.接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口与类的区别:
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口不能包含成员变量,除了 static 和 final 变量。
接口不是被类继承了,而是要被类实现。
接口支持多继承。
接口特性:
接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
抽象类和接口的区别:
1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
什么是面向对象?|java核心知识点整理
面向对象与面向过程相信很多Java开发者,在最初接触Java的时候就听说过,Java是一种面向对象的开发语言,那么什么是面向对象呢?面向对象编程(OOP:object-orientedprogramming)首先,面向对象就是... 查看详情
整理java面向对象
继承:需要注意的是Java不支持多继承,但支持多重继承。继承的特性1.子类拥有父类非private的属性,方法。2.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。3.子类可以用自己的方式实现父类的方法。4.Java的继承是... 查看详情
java知识系统回顾整理01基础02面向对象01类和对象
一、面向对象实例--设计英雄这个类LOL有很多英雄,比如盲僧,团战可以输,提莫必须死,盖伦,琴女 所有这些英雄,都有一些共同的状态 比如,他们都有名字,hp,护甲,移动速度等等这样我们就可以设计一种东西,叫做... 查看详情
java知识系统回顾整理01基础02面向对象02属性
一、根据实例给出"属性"的定义一个英雄有姓名,血量,护甲等等状态? 这些状态就叫做一个类的属性 ??二、属性的类型属性的类型可以是基本类型,比如int整数,float浮点数 也可以是类类型,比如String字符串 ??publicclassHe... 查看详情
java基础面试题整理(代码片段)
什么是面向对象?面向对象:生活中的一切事物都可以被称之为对象,生活中随处可见的事物就是一个对象,我们可以将这些事物的状态特征(属性)以及行为特征(方法)提取并出来,并以固... 查看详情
java知识系统回顾整理01基础02面向对象03方法
一、根据实例给出"方法"的定义在LOL中,一个英雄可以做很多事情,比如超神,超鬼,坑队友? 能做什么在类里面就叫做方法 ??比如队友残血正在逃跑,你过去把路给别人挡住了,导致他被杀掉。这就是坑队友每个英雄。。。... 查看详情
关于java面向对象基础整理以及个人的理解(适合初学者阅读)
JAVA的基础语法等都跟C有很大的相似之处,所以这里就不多啰嗦了。直接从数组开始。数组:1.声明int[]a;在声明的过程中,并没有分配空间给数组。我们可以在声明的同时,用new来分配相应的空间int[]a=newint[100];这里开辟了一个空... 查看详情
js面向对象整理
...。于是我就翻了翻《JavaScript高级程序设计》,对其进行整理了一下。1.什么是对象在ECMAScript中,对象就是一堆无序属性的集合,这些属性可以是基本值,也可以是别的对象和函数。所以我们也可以吧对象当成一组名值对 查看详情
javascript面向对象整理
整理一下js面向对象中的封装和继承。1.封装 js中封装有很多种实现方式,这里列出常用的几种。1.1原始模式生成对象 直接将我们的成员写入对象中,用函数返回。缺点:很难看出是一个模式出来的实例。代码:functi... 查看详情
java基础知识总结(超详细整理)(代码片段)
Java语言的特点1.面向对象面向对象(OOP)就是Java语言的基础,也是Java语言的重要特性。面向对象的概念:生活中的一切事物都可以被称之为对象,生活中随处可见的事物就是一个对象,我们可以将这些事物的状态特... 查看详情
java基础知识总结(超详细整理)(代码片段)
Java语言的特点1.面向对象面向对象(OOP)就是Java语言的基础,也是Java语言的重要特性。面向对象的概念:生活中的一切事物都可以被称之为对象,生活中随处可见的事物就是一个对象,我们可以将这些事物的状态特... 查看详情
java面试宝典pdf整理
一Java基础面试题面向对象和面向过程的区别Java语言有哪些特点关于JVMJDK和JRE最详细通俗的解答OracleJDK和OpenJDK 的对比Java 和C++的区别什么是Java程序的主类应用程序和小程序的主类有何不同Java 应用程序与小程序之间有那... 查看详情
java面试宝典pdf整理
一Java基础面试题面向对象和面向过程的区别Java语言有哪些特点关于JVMJDK和JRE最详细通俗的解答OracleJDK和OpenJDK 的对比Java 和C++的区别什么是Java程序的主类应用程序和小程序的主类有何不同Java 应用程序与小程序之间有那... 查看详情
javascriptssh知识点整理
七、Javascript部分1:什么是JavascriptJavaScript是一种基于对象(Object)和事件驱动(Event Driven)并具有安全性能的脚本语言。2:Java和Javascript的差别1、基于对象和面向对象Java是一种真正的面向对象的语言。即使是开发简单的程序,必... 查看详情
面向对象知识整理
魔术方法1.__construct构造函数2.__destruct析构函数3.__set/__get封装变量里的读取设置4.__tostring输出对象5.__clone克隆6.__autoload自动加载//面向对象的关键字1.class定义类2.public/protected/private访问修饰符3.$this这个对象4.extends继承5.override/overl... 查看详情
javascript面向对象(收集整理)
(1)封装 首先理解构造函数:所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。 functionCat(name,color){ this.name=name; ... 查看详情
面向对象,类和对象的整理(代码片段)
面向对象的三大要素:封装;继承;多态; 面向对象;传统的面向过程思想:是一个人把所有事情干完,一个人走完所有过程;现代面对对象思想:把所有的事,分工给好多人,每个人完成一部分;类的定义,通俗说就是定义了一... 查看详情
面向对象继承抽象方法重载知识点整理
面向过程、面向对象 面向过程:从开始到结束自己独立完成 面向对象:将一个事物划分为单体来各自实现区域性的功能,最后通过调用组合完成类、对象 类:某一些具有共同特征的物体 对象:指某一种具体的物... 查看详情