当前位置: 首页 > news >正文

tornado网站开发 教程小说阅读网站系统模板下载

tornado网站开发 教程,小说阅读网站系统模板下载,免费软文发布平台,西安网站设计公司排名本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. #x1f92d;#x1f92d;#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 前言 上节面向对象编程第一式封装 中小编提及了我们面向对象的三大特性就是 封装继承多态。 在本篇文章中小编将带着大家越入 面向对象编程的第二式 继承 那么什么是继承为什么需要继承继承的优点有哪些 以及继承和我们上篇学过的封装有什么关联 在小编都会带着大家找到以上问题的答案 目录 继承super 关键字protected 限定符继承方式final 关键字继承与组合 一. 继承 小伙伴一定很疑惑 为什么要继承呢 1. 继承的初识 Java 中使用类对现实世界中实体来进行描述类经过 实例化之后的产物对象 则可以用来表示现实中的 实体 但是现实世界错综复杂事物之间可能会存在一些 关联那在设计程序是就需要考虑。 比如狗和猫它们都是一个动物。 使用Java语言来进行描述就会设计出 1. 举个栗子 当小伙伴需要定义一个 dog 类时是不是 这样写的 // Dog.javaclass Dog{public String name;int age;float weight;public void eat(){System.out.println(name 正在吃饭);}public void sleep(){System.out.println(name 正在睡觉);}void Bark(){System.out.println(name 汪汪汪~~~);} }当小伙伴需要定义一个 cat 时是不是这样写的 // Cat.Java class Cat{String name;int age;float weight;public void eat(){System.out.println(name 正在吃饭);}public void sleep(){System.out.println(name 正在睡觉);}void mew(){System.out.println(name 喵喵喵~~~);} }通过观察上述代码会发现猫和狗的类存在 大量重复 的代码 那能否将这些共性抽取呢 面向对象思想中提出了继承的概念专门用来进行共性抽取实现代码复用。 2. 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段 它允许程序员在保持原有类特性的基础上进行 扩展增加新功能 这样产生新的类 称派生类 。继承呈现了面向对象程序设计的层次结构 体现了由简单到复杂的认知过程。继承主要解决的问题是 共性的抽取实现代码复用。 例如狗和猫都是动物那么我们就可以将共性的内容进行抽取然后采用 继承的思想 来达到共用。 上述图示中Dog和Cat都继承了 Animal类其中Animal类称为 父类/基类或超类 Dog和Cat 可以称为Animal的 子类/派生类 继承之后子类可以复用 父类中成员 子类在实现时只需关心自己 新增加的成员 即可。 从继承概念中可以看出继承最大的作用就是实现代码复用还有就是来实现多态 (下篇文章讲解)。 鱼式疯言 一句话总结下继承的特点就是 复用代码共性抽 继承的概念我们明白了下面就让我们实操一下吧 下面让小编带着感受下继承的语法是怎么样的 3. 继承的语法 在 Java 中如果要表示类之间的关系需要借助 extends 关键字 具体如下 修饰符 class 子类 extends 父类 { // … } 对 cat 和 dog 中场景使用继承方式重新设计 // Animal.java class Animal{String name;int age;public void eat(){System.out.println(name 正在吃饭);}public void sleep(){System.out.println(name 正在睡觉);} } // Dog.java class Dog extends Animal{void bark(){System.out.println(name 汪汪汪~~~);} }class Cat extends Animal{void mew(){System.out.println(name 喵喵喵~~~);} }class Test {public static void main(String[] args) {Cat catnew Cat();cat.name小喵;cat.sleep();Dog dognew Dog();dog.name阿黄;dog.bark();} } 从中我们可以看出效果是一样哒但值得注意的是有以下两点哦 鱼式疯言 注意 子类会将父类中的成员变量或者成员方法继承到子类中 子类继承父类之后必须要新添加自己特有的成员体现出与父类的不同否则就没有必要继承了。 可小爱同学问题就来了如果我们子类要访问父类的成员该怎么操作呢 这不小编也准备了嘛 下面请看 4. 父类成员访问 1.子类中访问父类不同名的成员变量 在继承体系中子类将父类中的方法和字段继承下来了 那在子类中能否直接访问父类中继承下来的成员呢 class Base {int a;int b; } class Derived extends Base{int c;public void method(){a 10; // 访问从父类中继承下来的ab 20; // 访问从父类中继承下来的bc 30; // 访问子类自己的c} }class Test {public static void main(String[] args) {Derived derivednew Derived();derived.method();System.out.println(derived.a);System.out.println(derived.b);System.out.println(derived.c);} }2.子类中访问父类同名的成员变量 public class Base { int a; int b; int c; } / public class Derived extends Base{ int a; // 与父类中成员a同名且类型相同 char b; // 与父类中成员b同名但类型不同 public void method(){ a 100; // 访问父类继承的a还是子类自己新增的a b 101; // 访问父类继承的b还是子类自己新增的b? c 102; // 子类没有c访问的肯定是从父类继承下来的c // d 103; // 编译失败因为父类和子类都没有定义成员变量b } }由上面的运行结果我们可以看出 在子类方法中 或者 通过子类对象访问成员时 如果访问的成员变量子类中有优先访问自己的成员变量。 如果访问的成员变量子类中无则访问父类继承下来的如果父类也没有定义则编译报错。 如果访问的成员变量与父类中成员变量同名则优先访问自己的。 鱼式疯言 总结起来就一句话的事 成员变量访问遵循就近原则自己有优先自己的如果没有则向父类中找。 3. 子类访问父类不同的成员方法 class Base {public void methodA(){System.out.println(Base中的methodA());} } class Derived extends Base{public void methodB(){System.out.println(Derived中的methodB()方法);}public void methodC(){methodB(); // 访问子类自己的methodB()methodA(); // 访问父类继承的methodA() // methodD(); // 编译失败在整个继承体系中没有发现方法methodD()} }class Test {public static void main(String[] args) {Derived derivednew Derived();derived.methodA();derived.methodB();derived.methodC();} }从中我们也可以得出一个小收获 ❤️ ❤️ ❤️ 总结成员方法没有同名时在子类方法中或者通过子类对象访问方法时 则优先访问自己的自己没有时再到父类中找如果父类中也没有则报错。 4. 子类访问父类相同的成员方法 class Base {public void methodA(){System.out.println(Base中的methodA());}public void methodB(){System.out.println(Base中的methodB());} }class Derived extends Base{public void methodA(int a) {System.out.println(Derived中的method(int)方法);}public void methodB(){System.out.println(Derived中的methodB()方法);}public void methodC(){methodA(); // 没有传参访问父类中的methodA()methodA(20); // 传递int参数访问子类中的methodA(int)methodB(); // 直接访问则永远访问到的都是子类中的methodB()基类的无法访问到} }class Test {public static void main(String[] args) {Derived derivednew Derived();derived.methodA(100);derived.methodB();derived.methodC();} }小编具体说明一下吧 通过子类对象访问父类与子类中不同名方法时优先在子类中找找到则访问否则在父类中找找到则访问否则编译报错。 通过派生类对象访问父类与子类同名方法时如果父类和子类同名方法的参数列表不同(重载)根据调用方法适传递的参数选择合适的方法访问如果没有则报错 鱼式疯言 还是那句话 成员方法访问遵循就近原则自己有优先自己的如果没有则向父类中找。 这时小爱同学就很坚持的问 那我非要在子类中访问父类的成员变量该怎么做呢 这时我们就不得不引出下一节的内容 super 关键字啦 二. super 关键字 由于设计不好或者因场景需要子类和父类中可能会存在相同名称的成员 如果要在子类方法中访问父类同名成员时该如何操作 直接访问是 无法做到 的Java提供了 super关键字 该关键字主要作用在子类方法中访问父类的成员。 1. super的实际运用 class Base {int a;int b;public void methodA(){System.out.println(Base中的methodA());}public void methodB(){System.out.println(Base中的methodB());} }class Derived extends Base{int a; // 与父类中成员变量同名且类型相同char b; // 与父类中成员变量同名但类型不同// 与父类中methodA()构成重载public void methodA(int a) {System.out.println(Derived中的method()方法);}// 与基类中methodB()构成重写(即原型一致重写下一章详细介绍)public void methodB(){System.out.println(Derived中的methodB()方法);}public void methodC(){// 对于同名的成员变量直接访问时访问的都是子类的a 100; // 等价于 this.a 100;b 101; // 等价于 this.b 101;// 注意this是当前对象的引用// 访问父类的成员变量时需要借助super关键字// super是获取到子类对象中从基类继承下来的部分super.a 200;super.b 201;// 父类和子类中构成重载的方法直接可以通过参数列表区分清访问父类还是子类方法methodA(); // 没有传参访问父类中的methodA()methodA(20); // 传递int参数访问子类中的methodA(int)// 如果在子类中要访问重写的基类方法则需要借助super关键字methodB();// 直接访问则永远访问到的都是子类中的methodA()基类的无法访问到super.methodB();// 访问基类的methodB()} }class Test {public static void main(String[] args) {Derived derivednew Derived();derived.methodA(100);derived.methodB();derived.methodC();} }从上面的运行结果来看我们可以知道 在子类方法中如果想要明确访问父类中成员时借助super关键字即可。 注意事项 1. 只能在非静态方法中使用 2. 在子类方法中访问父类的成员变量和方法。 至于 super的其他用法 在后文继续介绍哦。 2.父子类构造方法 父子父子先有父再有子 即子类对象构造时需要先调用父类构造方法然后执行子类的构造方法。 1. 栗子说明 class Base {public Base(){System.out.println(Base());}}class Derived extends Base{public Derived(){// super(); // 注意子类构造方法中默认会调用基类的无参构造方法super(),// 用户没有写时,编译器会自动添加而且super()必须是子类构造方法中第一条语句// 并且只能出现一次System.out.println(Derived());} }class Test {public static void main(String[] args) {Derived d new Derived();} }所以我们明白了父类与子类构造方法的特点 在子类构造方法中并没有写任何关于基类构造的代码 但是在构造子类对象时先执行基类的构造方法然后执行子类的构造方法 因为子类对象中成员是有两部分组成的基类继承下来的以及子类新增加的部分 。 父子父子肯定是先有父再有子所以在构造子类对象时候 先要调用父类的构造方法将从父类继承下来的成员构造完整 然后再调用子类自己的构造方法将子类自己新增加的成员初始化完整 。 鱼式疯言 注意 若父类显式定义无参或者默认的构造方法在子类构造方法第一行默认有隐含的 super() 调用即 调用基类构造方法 如果父类构造方法是带有参数的此时需要用户为 子类显式定义构造方法 并在子类构造方法中选择合适的父类构造方法调用否则 编译失败 如下图。 在子类构造方法中super(…)调用父类构造时必须是子类构造函数中第一条语句。 super(…)只能在子类构造方法中出现一次并且不能和 this 同时出现 2. super 和 this super和this都可以在成员方法中用来访问 成员变量和调用其他的成员函数都可以作为 构造方法的第一条语句 那他们之间有什么区别呢 同 都是Java中的 关键字 只能在类的 非静态方法 中使用用来访问 非静态成员方法和字段 在构造方法中调用时必须是构造方法中的 第一条语句 并且不能同时存在 异 this是当前对象的引用当前对象 即调用实例方法的对象 super相当于是子类对象中从父类继承下来 部分成员的引用 在非静态成员方法中this用来访问本类的方法和属性super用来 访问父类继承下来的 方法和属性 在构造方法中this(…)用于调用本类构造方法super(…)用于调用父类构造方法两种调用不能同时在构造方法中出现 构造方法中一定会存在super(…)的调用用户没有写编译器也会增加但是this(…)用户不写则没有 3. 父子类代码块优先级 我们还记得之前讲过的代码块吗 我们简单回顾一下几个重要的代码块实例代码块和静态代码块。 在没有继承关系时的执行顺序。 宝子们可以参考下面链接哦 未继承的代码块的执行顺序链接 先回顾一下我们上篇文章的代码块的执行顺序 简单来说就是两句话 静态代码块先执行**并且只执行一次在类加载阶段执行** 当有对象创建时才会执行实例代码块实例代码块执行完成后最后构造方法执行 而在本篇文章主要讲解继承关系下代码的 执行顺序 1. 举个栗子 class Person {public String name;public int age;public Person(String name, int age) {this.name name;this.age age;System.out.println(Person构造方法执行);}{System.out.println(Person实例代码块执行);}static {System.out.println(Person静态代码块执行);} } class Student extends Person{public Student(String name,int age) {super(name,age);System.out.println(Student构造方法执行);}{System.out.println(Student实例代码块执行);}static {System.out.println(Student静态代码块执行);} }class TestDemo4 {public static void main(String[] args) {Student student1 new Student(张三,19);System.out.println();Student student2 new Student(xiaoxiao,20);}public static void main1(String[] args) {Person person1 new Person(byte,10);System.out.println();Person person2 new Person(dada,20);} }通过分析结果我们可以得出以下结论 1、父类静态代码块优先于子类静态代码块执行且是最早执行 2、父类实例代码块和父类构造方法紧接着执行 3、子类的实例代码块和子类构造方法紧接着再执行 4、第二次实例化子类对象时父类和子类的静态代码块都将不会再执行 鱼式疯言 有图有真相 三. protected 限定符 在面向对象编程第一式封装章节中为了实现封装特性 Java中引入了 访问限定符 主要限定 类者类中成员能否在类外或者其他包中被访问。 友友们是不是还记得这张图呢我们已经详细说明了private default public 三个限制符 如果还模糊的小伙伴可以参考下面链接哦 private default public 限制符的详解 那么这篇中我们就来揭开 protected 的神秘面纱 1. 栗子one 下面就让我们一起验证下什么叫做 不同包中的子类访问权限 extendo1 的包下 package extend01; public class B {private int a;protected int b;public int c;int d; }extendo1 的包下 package extend01; public class D extends B{public void method(){// super.a 10;// 编译报错父类private成员在相同包子类中不可见super.b 20;// 父类中protected成员在相同包子类中可以直接访问super.c 30;// 父类中public成员在相同包子类中可以直接访问super.d 40;// 父类中默认访问权限修饰的成员在相同包子类中可以直接访问} } // extend01包中 // 不同包中的类class TestC {public static void main(String[] args) {D d new D();d.method();// System.out.println(c.a);// 编译报错父类中private成员在不同包其他类中不可见System.out.println(d.b);System.out.println(d.c);// 父类中public成员在不同包其他类中可以直接访问System.out.println(d.d);// 父类中默认访问权限修饰的成员在不同包其他类中不能直接访问} }栗子 two extendo1 的包下 package extend01; public class B {private int a;protected int b;public int c;int d; }extendo2 的包下 package extend02;import extend01.B; public class C extends B {public void method(){// super.a 10;// 编译报错父类中private成员在不同包子类中不可见super.b 20;// 父类中protected修饰的成员在不同包子类中可以直接访问super.c 30;// 父类中public修饰的成员在不同包子类中可以直接访问//super.d 40;// 父类中默认访问权限修饰的成员在不同包子类中不能直接访问}}// extend02包中 // 不同包中的类 class TestC {public static void main(String[] args) {C c new C();c.method();// System.out.println(c.a);// 编译报错父类中private成员在不同包其他类中不可见// System.out.println(c.b);// 父类中protected成员在不同包其他类中不能直接访问System.out.println(c.c);// 父类中public成员在不同包其他类中可以直接访问// System.out.println(c.d);// 父类中默认访问权限修饰的成员在不同包其他类中不能直接访问} }从上面两个栗子的运行结果我们就可以看出 protected 限定符只要还是与其他限定符**除了public之外** 最主要的区别就是能够在 不同包的子类访问父类的成员 。 注意父类中 private 成员变量虽然在 子类中不能直接访问但是也继承到子类中了 鱼式疯言 那么话说回来了我们该在什么场景下使用他们呢 ! 什么时候下用哪一种呢? 我们希望类要尽量做到 “封装”, 即隐藏内部实现细节, 只暴露出必要的信息给类的 调用者 . 因此我们在使用的时候应该尽可能的使用 比较严格 的访问权限. 例如如果一个方法能用 private, 就尽量不要用 public. 另外, 还有一种 简单粗暴 的做法: 将所有的字段设为 private, 将所有的方法设为 public. 不过这种方式属于是对访问权限的滥用, 还是更希望小伙伴们能写代码的时候认真思考, 该类提供的字段方法到底给 “谁” 使用(是类内部自己用, 还是类的调用者使用, 还是子类使用). 四.继承方式 我们了解了继承的逻辑之后下面就让小编都小小了解一下继承都有哪些方式吧 在现实生活中事物之间的关系是非常复杂灵活多样比如 但在 Java 中只支持以下几种继承方式 注意Java中不支持多继承。 时刻牢记, 我们写的类是现实事物的抽象. 而我们真正在公司中所遇到的项目往往业务比较 复杂 可能会涉及到一系列复杂的概念, 都需要我们使用代码来表示, 所以我们真实项目中所写的类也会有很多. 类之间的关系也会更加复杂. 但是即使如此, 我们并不希望类之间的继承层次太复杂. 一般我们不希望出现超过三层的继承关系. 如果 继承层次 太多, 就需要考虑对代码进行重构了. 如果想从语法上进行限制继承, 就可以使用 final 关键字 下面就让小编具体讲讲我们 final 的用法吧 五. final 关键字 final关键可以用来 修饰变量、成员方法以及类。 1.修饰变量或字段 当 final 修饰变量或者字段时表示 常量(即不能修改) public class J3_15 {public static void main(String[] args) {final int a 10;a 20; // 编译出错}}2. 修饰类 当 final修饰类时 表示此类 不能被继承 final class Animal {//... }class Bird extends Animal {//...public static void main(String[] args) {} }// 编译出错 //Error:(3, 27) java: 无法从最终com.bit.Animal进行继3. 修饰方法 当 final 表示该方法不能被重写(下篇文章介绍) 六. 继承与组合 和继承类似, 组合也是一种表达类之间关系的方式, 也是能够达到代码重用的效果。 (这里只是做个简单的了解哦,) 组合并没有涉及到特殊的语法 (诸如 extends 这样的关键字), 仅仅是将 一个类 的实例作为 另外一个类 的字段。 1. 举个栗子 就拿我们平常的小汽车举例吧 汽车和其 轮胎、发动机、方向盘、车载系统 等的关系就应该是 组合 因为汽车是有这些 部件组成 的。 // 轮胎类 class Tire{ // ... } // 发动机类 class Engine{ // ... } // 车载系统类 class VehicleSystem{ // ... } class Car{ private Tire tire; // 可以复用轮胎中的属性和方法 private Engine engine; // 可以复用发动机中的属性和方法 private VehicleSystem vs; // 可以复用车载系统中的属性和方法 // ... } // 奔驰是汽车 class Benz extend Car{ // 将汽车中包含的轮胎、发送机、车载系统全部继承下来 }组合和继承都可以实现代码复用应该使用继承还是组合需要根据应用场景来选择 一般小编建议能用组合尽量用组合。 具体想要提前了解组合可以参考下面的链接哦,不过小编后期也会出组合专题的文章哦,咱们敬请期待哦 继承与组合 总结 继承: 熟悉了继承的逻辑思路以及实际运用 super 关键字: super 的出现是如何解决父类和子类之间的关系的 protected 限定符: 对于 protected 与其他限定符的本质区别 继承方式: 简单了解了不同的继承方式 final 关键字: final 的出现有效的限制了继承的多重性以及在其他类型的运用 继承与组合: 有继承就会有组合,后续我们会重点讲解组合的干货,而本篇文章的重点是理解继承的核心 如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正 希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力
http://www.w-s-a.com/news/882232/

相关文章:

  • 做管理信息的网站com域名查询
  • 免费推广网站推荐外贸推广平台哪个好
  • 腾宁科技做网站399元全包企业校园网站建设
  • 海外医疗兼职网站建设公司取名字大全免费
  • 龙口市规划建设局网站vi设计和品牌设计的区别
  • 企业网站的总体设计网站建设评审验收会议主持词
  • 网站建设完成推广响应式网站设计开发
  • 电商网站用php做的吗网站开发流程可规划为那三个阶段
  • flash网站怎么做音乐停止深圳网站建设金瓷网络
  • 哪个网站可以做房产信息群发怎么做国内网站吗
  • 微商城网站建设公司的价格卖磁铁的网站怎么做的
  • 免费做做网站手机平台软件开发
  • 网站单页做301徐州百度网站快速优化
  • 织梦怎么制作手机网站漳州专业网站建设公司
  • 邓州做网站网络优化概念
  • 查看网站开发phonegap wordpress
  • 网站建设和维护待遇怎样c 做的网站又哪些
  • 淮南网站推广网站开发行业前景
  • 丽水市龙泉市网站建设公司江门手机模板建站
  • 做化妆品注册和注册的网站有哪些wordpress加关键字
  • 四川新站优化php笑话网站源码
  • 外贸类网站酷玛网站建设
  • 合肥网站设计建设南宁网站seo推广优化公司
  • 临沂百度网站7x7x7x7x8黄全场免费
  • 海洋牧场网站建设大良网站设计价格
  • 手机端网站关键字排名北京seo公司哪家好
  • 福建建设培训中心网站网站建站服务公司地址
  • 青岛网站优化快速排名企业网址怎么整
  • 做公司网站用什么系统seo搜索排名优化方法
  • dw怎么做网站标题图标做网站重庆