继承:

概念:

基类,超累,父类

访问权限:

Public :无限制,自由访问

Private:不可继承

protected :包内,包外,可访问,继承

default:没有指明任何权限下,默认在同一包内,可访问

构造方法:

子类调用父类构造方法

Super(参数);//必须为子类构造方法的第一句。!!

原因:在创建子类对象时,先要构造父类,也就是初始化子类先初始化父类。在继承下,没有构造父类,就没有子类,会抛出异常。Java虚拟机一般会默认构造父类(初始化父类)。

Final-不可继承的类

Final声明的变量不可更改;

Final声明的方法不可覆盖(重写);

Final声明的类不可继承,只读。

子类与父类方法的联系

1扩展:增加父类没有的方法

2覆盖(重写):同名同参。不能覆盖final,static的方法

3重载:同名不同参。

分析:fruit继承了object类,并重写了toString()方法。在“+”后引用一个对象名,系统默认会调用toString()方法。此方法返回“类名 @ + hashCode”。

多态

***

父类(或接口)对象可引用子类(实现接口的类)对象

***

1子类可以给父类赋值;

Class Animal{}

Class Dog extends Animal{}

Animal an=new Dog();//可以

2父类要强制转换后给子类赋值;

3可以用instanceof运算符判断对象是否可以转换

Object obj instanceof String;true or fause;

例1:

Class Animal{}

Class Dog extends Animal{}

Class Cat extends Animal{}

Animal an=new Animal();

Dog dog=new Dog();

Cat cat=new Cat();

an=dog;//对

dog=an;//错

dog=(dog)an;//对

dog=cat;//错

dog=(dog)cat;//错,Cat和Dog两个类没有继承关系

例2:子类父类相互调用变量方法

class father1{

public int num=100;

public void show() {

System.out.println("father."+num);

}

}

class son extends father1{

public int num=200;

public void show() {

System.out.println("son."+num);

}

}

public class Father {

public static void main(String args[]) {

son s=new son();

father1 fa1=new father1();

father1 fa2=new son();

fa1.show();//自己的方法

s.show();//子类自己的方法

fa2.show();//引用子类对象,调用子类的方法

fa1=s;//子类赋给父类对象,调用子类方法

fa1.show();

fa1.num++;//父类字段改变

System.out.println(fa1.num);

fa1.show();

((son)fa1).num++;//改变子类字段

System.out.println(fa1.num);

fa1.show();//改变了子类的变量

}

}

总结:

1;子类与父类有相同的方法时;子类对象用自己的(相当于子类重载了父类的同名方法),父类对象调用自己的方法。父类引用子类对象时调用子类的方法。

2:子类与父类有同名的字段(变量)时;父类用父类的,子类用子类的(子类的变量会隐藏或代替父类变量,如果要调用父类变量时可以用super)。

3((son)father).num++;改变了子类的变量;先将父类对象转换为子类对象,后改变子类变量。

例3:

import java.util.Vector;

class Animal{

public void eat() {

System.out.println("");

}

}

class Lion extends Animal{

public void eat() {

System.out.println("肉");

}

}

class Monkey extends Animal{

public void eat() {

System.out.println("香蕉");

}

}

class Bird extends Animal{

public void eat() {

System.out.println("米");

}

}

public class Feeder {

public void feed(Vector<Animal> v) {

for(Animal an:v) {

an.eat();

}

}

public static void main(String[] args) {

Feeder feeder=new Feeder();

Vector<Animal>temp=new Vector();

//加一个狮子

temp.add(new Lion());

//加2个猴子

for(int i=0;i<2;i++) {

temp.add(new Monkey());

}

//加3个鸟

for(int i=0;i<3;i++) {

temp.add(new Bird());

}

feeder.feed(temp);

}

}

结果截图:

多态编程两种主要形式

1:继承多态。例3

2:接口多态。使用接口代替抽象基类。

抽象abstract---------------------------多态&继承

Abstract class ASS{

Public void show(){
}

}

三种类型:

1. 直接定义了一个抽象类

2. 继承了一个抽象类,但没有完全实现父类方法(必须实现所有方法)

3. 实现了一个接口,但没有完全实现此接口中的方法

创建对象:

抽象类不能直接创建对象

可引用子类对象。

例1:

abstract class ab1{

public void show(int a) {

}

}

abstract class ab2 extends ab1{

public void showw(float f) {

}

}

class ab3 extends ab2{

public void show(int a) {

System.out.println("1-"+a);

}

public void showw(float f) {

System.out.println("2-"+f);

}

}

public class Abstractx {

public static void main(String args[]) {

ab3 xx=new ab3();

xx.show(1);

xx.showw(11);

ab2 x=new ab3();

x.showw(2);

x.show(3);

ab1 xxx=new ab3();

xxx.show(4);

//xxx.showw(11);错,ab1类中没有showw()方法

}

}

例2:

abstract class Animal2{

public void show() {

}

}

class Cat extends Animal2{

public void show() {

System.out.println("喵");

}

}

class Dog extends Animal2{

public void show() {

System.out.println("汪");

}

}

public class Abstractx {

public static void main(String args[]) {

Animal2 x=new Cat();

x.show();

Animal2 xx=new Dog();

xx.show();

}

}

接口(不是类)

定义:Interface,实现:implements

(自动的)成员变量:static ,final,成员方法:public

接口可以继承接口

例:

interface Face1{

void show();

void show2();

void show3();

}

class Achieve implements Face1{

public void show() {

System.out.println("show");

}

public void show2() {

System.out.println("show2");

}

public void show3() {

}

}

public class InterFace1 {

public static void main(String args[]) {

Achieve ac=new Achieve();

ac.show();

ac.show2();

Face1 face=new Achieve();

face.show();

face.show2();

}

}

继承&多态的更多相关文章

  1. Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态

    一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---重构代码,利用继承多态 1. 主界面截图如下: 2.  ...

  2. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  3. 浅谈学习C++时用到的【封装继承多态】三个概念

    封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...

  4. No2_4.接口继承多态_Java学习笔记_经典案例

    import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import jav ...

  5. Java继承多态中的方法访问权限控制

    java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...

  6. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  7. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  8. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  9. python面向对象之继承/多态/封装

    老师说,按继承/多态/封装这个顺序来讲. 子类使用父类的方法: #!/usr/bin/env python # coding:utf-8 class Vehicle: def __init__(sel ...

  10. java继承多态和抽象类接口

    一.继承 通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类.已有的称为父类,新的类称为子类(父类派生子类,子类继承父类).(1)继承的优点:    ①代码的可重用性:    ②父类的属性 ...

随机推荐

  1. 在Mac系统下使用自己安装的PHP

    今天在安装单元测试框架PHPUnit,需要PHP的最低版本是5.6,由于我的MacBook自带的PHP版本是5.5.36,不能满足安装条件. 看了一下这个网址:https://php-osx.liip ...

  2. perform-maintence-on-replica-set-members

    https://docs.mongodb.com/v3.0/tutorial/perform-maintence-on-replica-set-members/ 1 oplog 改变大小 --详见mo ...

  3. 配置docker中免密码SSH

    更换docker国内镜像,使用DaoCloud,特别快 编写Dockerfile文件 FROM ubuntu MAINTAINER ggzone xxx@live.com ENV REFRESHED_ ...

  4. 侯捷STL学习(一)--顺序容器测试

    开始跟着<STL源码剖析>的作者侯捷真人视频,学习STL,了解STL背后的真实故事! 视频链接:侯捷STL 还有很大其他视频需要的留言 第一节:STL版本和重要资源 STL和标准库的区别 ...

  5. md5加密(2)

    package test1; import java.security.MessageDigest; public class MD5Test { //十六进制下数字到字符的映射数组 private ...

  6. Eclipse中classpath和deploy assembly的文件位置

    classpath的配置信息存储在工程根目录下的.classpath文件 deploy assembly配置信息存储在工程目录下的.settings\org.eclipse.wst.common.co ...

  7. 记工作的变化--入住DB

    2013年11月1日----一个值得纪念的日子! 今天才是我作为一个劳动者,步入社会的真正开始. 以前一直觉得做技术的技术做好就行了不用在意其余的细节.现实是做人(沟通)比做技术更重要! 以前一直觉得 ...

  8. 部署和调优 2.3 tomcat中JDK安装

    目前有很多网站使用 jsp 的程序编写,所以解析 jsp 的程序就必须要有相关的软件来完成.Tomcat 就是用来解析 jsp 程序的一个软件.因为 Tomcat 技术先进.性能稳定,而且免费,因而深 ...

  9. DAY17-Django之model增删改

    添加表记录 普通字段 #方式1 publish_obj=Publish(name="人民出版社",city="北京",email="renMin@16 ...

  10. oracle中函数和存储过程的区别和联系

    oracle中函数和存储过程的区别和联系 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和 ...