1.接口:

类  和  对象     对象  is   a  类

    例子:

   小鸟    is  a  动物
飞机 is a 交通工具
子弹 is a 武器
卫星 is a 通讯工具 问题?
01. 小鸟 飞机 子弹 卫星 虽然不是一类! 但是却有一个公共点!!!都会飞!
02. 我们能不能把这个飞行的方法 写在 动物或者交通工具这些类中???
不能??为什么??
因为一旦我们把 飞行这个方法写在了 动物类中,代表所有的动物都会飞了!!!! 小鸟具有飞行的能力!
飞机具有飞行的能力!
子弹具有飞行的能力!
卫星具有飞行的能力!
这种关系 我们称之为 has a! 我们把 飞行这个能力! 写在一个叫 接口 的地方!
谁具有飞行的能力,就去 实现这个接口即可! 接口 : interface 特点:
01.接口不能被实例化,也不能有构造方法!
02.实现类必须重写接口中所有的方法!除非子类是抽象类或者接口!
03.接口中所有的变量 都是 静态常量!(必须赋予初始值) static final
04.接口中所有的方法都是 抽象方法! public abstract
05.解决了java中单根继承的问题,一个类只能extends一个类!但是可以implements N个接口
每个接口之间,使用逗号 隔开!
接口本身 只提供 某种功能,但是这个功能的具体实现,接口并不关注!
谁关注??谁实现了这个接口,谁关注! 接口A{
方法A();
}
接口B{
方法B();
}
接口C{
方法C();
} 接口D extends A,B,C{ } 实现类 implements 接口D{
方法A();
方法B();
方法C();
}
/*
* 动物类
*/
public abstract class Animal { public abstract void eat(); /**
* 因为 不是所有的动物都会飞行!
* 所以这个fly()压根 就不能定义在animal类中
*/
// public abstract void fly(); }

接口

/**
* 飞行的接口!
* 小鸟 飞机 以及 子弹 飞行的方式 一样吗?? 不一样!!
* 所以说 这个fly()有必要写方法体吗?? 没必要!!
* 说明这个fly()就是一个抽象方法!
*
*
*
*/
public interface FlyInterface { /**
* 静态常量
*/
static final int NUM = ; /**
* 飞行的能力
*/
public abstract void fly(); }

接口

public class Bird extends Animal implements FlyInterface {

    @Override
public void eat() {
System.out.println("小鸟在吃虫子!");
} @Override
public void fly() {
System.out.println("小鸟在飞翔.......");
}
}

接口

public class Cat extends Animal {

    @Override
public void eat() {
System.out.println("СèßäÔÙ³ÔÓã");
} }

接口

2.内部类:

内部类:把一个类写在了另一个类或者方法中!

分类:
01.成员内部类
可以访问我们外部类的所有属性和方法!
如果我们想访问内部类,必须要有外部类,只能通过外部类来访问内部类!
// 01.实例化外部类对象
Father father = new Father();
// 02.通过外部类对象创建内部类对象
Father.Son son = father.new Son();
// 03.调用内部类的方法
son.sayHello();
特点:
01.成员内部类可以拥有private,protected访问权限修饰符
02.如果外部类和内部类有相同的属性和方法的时候,就近原则,使用内部类的!
想使用外部类的属性和方法时:
外部类名.this.属性/方法!

02.局部内部类
类被定义在一个方法体或者作用域中!
特点:
仅限于方法体内使用 ,可以理解成局部变量! 03.匿名内部类 ******
001.没有名称!看不到类的定义!
002.所有的匿名内部类必须继承一个类或者实现一个接口 04.静态内部类
01.在内部类上加static
02.不依赖于外部类,可以直接new
03.不能访问外部类的非静态方法和属性
public class Father { // 外部类
/**
* 外部类的成员变量
*/
private static int age = ;
private String name = "小黑"; class Son { // 成员内部类
int age = ;
String name = "小白"; /**
* 内部类打招呼的方法
*/
public void sayHello() {
System.out.println("外部类的姓名:" + Father.this.name);
}
} /**
* 外部类的方法
*/
public void getSon() {
class Son { // 局部内部类 只能在getSon()中使用
public void sayBye() {
System.out.println("局部内部类 bye ");
}
}
Son son = new Son(); // 仅限于方法体内使用
son.sayBye();
} static class Son2 { // 静态内部类
public void sayBye() {
System.out.println("静态内部类====》 bye " + age);
}
} }

内部类

public interface Animal {

    void eat();

    void sleep();

}

内部类

import cn.bdqn.bean.Father.Son2;

public class InnerClassTest {

    public static void main(String[] args) {
// 使用内部类???
// 01.实例化外部类对象
Father father = new Father();
// 02.通过外部类对象创建内部类对象
Father.Son son = father.new Son();
// 03.调用内部类的方法
son.sayHello(); // 使用局部内部类
father.getSon(); // 使用静态内部类
Son2 son2 = new Son2();
son2.sayBye(); } // 当我们所在方法的形参需要在内部类中使用的时候,这个形参必须是final 修饰的! class Son { public void eatSomething(String something, final int age) {
// 使用匿名内部类
Animal dog = new Animal() {
@Override
public void sleep() {
System.out.println("小狗在睡觉");
} @Override
public void eat() {
System.out.println(age);
}
};
dog.eat();
dog.sleep(); } } }

内部类

OOP⑻的更多相关文章

  1. c#面向对象基础技能——学习笔记(二)基于OOP思想研究对象的【属性】

    字段(成员变量): 字段只能从对象中访问实例字段,无法直接从类中访问(换言之,不创建实例就不能访问),可以理解为:字段一般用在内部数据交互使用,当需要为外部提供数据时,(要优先使用自动实现的属性而不是 ...

  2. 一个简单oop的changeTab

    好多地方都会用到这样一个效果“点击tab切换内容页”,根据自己的想法实现了一下,写了个简单的插件.以前写代码都是标准的函数式编程,现在觉得面向对象编程看起来比较爽,并且更容易维护,于是就用oop的思想 ...

  3. Python OOP(面向对象编程)

    一OOP的作用 在Python中,类是面向对象设计(OOP)的主要工具.通过使用类这种工具,OOP可以: 1.分解代码,最小化代码的冗余. 2.通过定制现有的代码,来编写新的程序,而不用在原处进行修改 ...

  4. OOP,WEB开发实用小技巧

    偶然读到一篇博客,记录一下心得.这种设计对于新手来说一般是想不到的,它充分的发挥了OOP语言的特性,让代码专用而清爽.这是不是重构的思想呢? 我们在写业务层的时候,有很多方法是重复功能的,我们就可以使 ...

  5. 从OOP的角度看Golang

    资料来源 https://github.com/luciotato/golang-notes/blob/master/OOP.md?hmsr=toutiao.io&utm_medium=tou ...

  6. 玩转JavaScript OOP[2]——类的实现

    概述 当我们在谈论面向对象编程时,我们在谈论什么?我们首先谈论的是一些概念:对象.类.封装.继承.多态.对象和类是面向对象的基础,封装.继承和多态是面向对象编程的三大特性. JavaScript提供了 ...

  7. Atitit 面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)的区别和联系

    Atitit 面向对象编程(OOP).面向组件编程(COP).面向方面编程(AOP)和面向服务编程(SOP)的区别和联系 1. 面向组件编程(COP) 所以,组件比起对象来的进步就在于通用的规范的引入 ...

  8. iOS - 对OOA、OOD、OOP的理解

    很多人在求职的时候,会遇到一个这样的问题:“对OOD/OOP有较深的理解”,这个时候有人就会问OOD.OOP是什么呢?那么今天咱们就一块来看一下OOA.OOD.OOP到底是什么! (一)OOA--面向 ...

  9. OOP感悟

    行内讲的最多的就是出来一年内基本靠copy,一年后才基本懂得如何去写代码,而理解领悟oop,需要的时间却不定. 我工作中,我发现很多人拿着面向对相当的语言作者做着面向过程的事情,不需要知其所以然,只要 ...

  10. 初识JAVA之OOP

    有一段时间没发博客了,每次手打还是很累,但感觉很充实.. 最近发现很多初学者到了面向对象编程这个知识点时,不太清楚类是如何转化成为对象的,很是困扰,今天我在这里谈谈我的理解,大家一起来研究学习... ...

随机推荐

  1. ssh连接docker镜像ubuntu与debian

    用密码登录root docker官网给的sshdemo是ubuntu的,https://docs.docker.com/engine/examples/running_ssh_service/   亲 ...

  2. x1c2017 8G版 win linux的取舍纠结记录

    x1c 2017 的 i5 7200U 8G ram 的丐版.换了1T SSD.其实一般使用没啥问题. 1 外出携带的轻便性太满意(mac13寸相比之下都太重了): 2 coding时候的安静性,比原 ...

  3. laravel配置路由除了 / 都是404解决办法

    1.php.ini开启phpopenssl 2.conf  (nginx为例) location / { index index.html index.htm index.php l.php; #tr ...

  4. VA&RVA 和 RVA to RAW

    VA&RVA VA指的是进程虚拟内存的绝对地址,RVA(Relative Virtual Address,相对虚拟地址)指从某个基准位置(ImageBase)开始的相对地址.VA与RVA满足下 ...

  5. Configuring Groovy SDK within IntelliJ IDEA

    一.原因 IntelliJ IDEA期待一个the standard Groovy SDK    二.解决方案: 下载安装Groovy就可以了   官网下载地址: http://groovy-lang ...

  6. v-for

    在实际的项目中,我们很多时候会碰到将JSON数据中的数组或对象渲染出列表之类的元素.在Vue中,提供了一个 v-for的指令,可以渲染列表. 组件和v-for 在自定义组件里,你可以像任何普通元素一样 ...

  7. ubuntn 安装python3 及 django及pip3

    1.sudo apt-get install python3-pip    安装pip3 2.sudo pip3 install django   通过pip3安装django 3. sudo apt ...

  8. linux中的软、硬链接

    linux中的软.硬链接 硬链接 硬链接(hard link),如果文件B是文件A的硬链接,则A的inode节点号与B的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同 ...

  9. STLC - 软件测试生命周期

    什么是软件测试生命周期(STLC)? 软件测试生命周期(STLC)定义为执行软件测试的一系列活动. 它包含一系列在方法上进行的活动,以帮助认证您的软件产品. 图 - 软件测试生命周期的不同阶段 每个阶 ...

  10. React Native之FlexBox布局

    参考原文链接:https://www.cnblogs.com/wujy/p/5841685.html 弹性盒模型(The Flexible Box Module),又叫Flexbox,意为“弹性布局” ...