网站建设可以使用模板么,在线网站制作模拟,网站规划详细设计怎么写,手机购物网站源码上文Java 浅析三大特性之一封装我们说到Java是一个注重编写类#xff0c;注重于代码和功能复用的语言。Java实现代码复用的方式有很多#xff0c;这里介绍一个重要的复用方式——继承。在介绍继承之前#xff0c;我们要明确一点#xff0c;继承是一个比较复杂的编写类的方式…上文Java 浅析三大特性之一封装我们说到Java是一个注重编写类注重于代码和功能复用的语言。Java实现代码复用的方式有很多这里介绍一个重要的复用方式——继承。在介绍继承之前我们要明确一点继承是一个比较复杂的编写类的方式他会破坏掉父类的封装因此只有我们确定需要用到继承的时候我们才会用继承。继承的概念继承是一种构建新类的方式他是基于已有的类的定义为基础构建新的类已有的类称为父类新构建的类称为子类子类能调用父类的非private修饰的成员同时还可以自己添加一些新的成员扩充父类甚至重写父类已有的方法更其表现符合子类的特征。让子类的表现更独特更专业。继承的写法Java规定一个类后面紧跟 extends关键字再加一个类的名字则表示新建的类继承自extends 后面的那个类。在我们上面这个文章最后我们列举了一个类代码如下public class Student {private String name;private String age;private String handleName(String name){return Im name;}private String handleAge(String age) {return age 岁;}public String getName() {return name;}public void setName(String name) {this.name handleName(name);}public String getAge() {return age;}public void setAge(String age) {this.age handleAge(age);}}现在我们新建一个类去继承自他这个类我们就叫Boys,其代码如下public class Boys extends Student {Overridepublic void setName(String name) {super.setName(name);}Overridepublic String getAge() {return super.getAge();}Overridepublic String getName() {return super.getName();}Overridepublic void setAge(String age) {super.setAge(age);}}在上面代码中我们可以看到很多相似的方法这些方法的方法签名参数返回类型都是与父类的方法是一致Java允许我们定义和父类一致的方法以便我们在这个方法中写入新的代码。上面方法中我们会看见一个新的关键字super这个关键字与this相似不过super表明调用方法的对象是父类的对象那这段自动生成的代码的意思就是如果我们不添加新的内容那么当我们子类调用这些方法的时候执行的是父类的方法。同时我们在这个方法上面看见一个注解 Override这表明这个方法是覆盖父类的方法而不是方法重载下面我具体说一下什么是方法重载以及这个注解存在的必要。方法重载方法重载是很有必要的一种方式他其实体现的是一种多态。即我定义了一种方法这个方法可以承接很多类型的参数而不要针对每个参数定义不同的方法。其实构造器就是方法重载的一个典型应用也因为构造器必须要根据不同的参数构造不同的对象所以必须要实现方法重载。下面这个例子我们看一下什么是重载public class OverLoading {public void print(String args1) {System.out.println(args1);}public void print(String args1, String args2) {System.out.println(args1 args2);}public void print(int args1) {System.out.println(args1);}public String print(double args1) {System.out.println(args1);return null;}//这不是方法重载这是错误的语句// public String print(String args1) {// System.out.println(args1);// return null;// }public static void main(String[] args) {OverLoading ol new OverLoading();ol.print(1.0);ol.print(1);ol.print(1);ol.print(1, 1);}}//输出结果1.01111上面的代码当中只有一个方法print但这个方法却可以接受多种参数甚至返回的类型也不一样但是我们在测试时候发现根据输入的不同系统会自动执行不同的print。这就是方法的重载。注意上面我有一注释的语句这个语句是错误的方法重载所以我们要如何去区分方法的重载呢。其实规则比较简单每一个重载的方法必定有不同的参数列表。条件只有这一个。第一个当中参数列表是String args1第二个参数列表是String args1, String args2,第三个参数列表是int args1第四个参数列表是double args1。这四个每一个参数的列表都是不一样的所以他们是重载的方法而第五个也就是说注释的语句显然参数列表是String args1与第一个是重复的所以他不是方法重载系统会直接报错告诉你这个方法已经被定义了。甚至更极端的情况参数的顺序都不一样也算是方法重载但在这个例子里是不存在顺序不一样的但下面这段代码算方法重载public String print(int args1, String args2) {return null;}public String print(String agrs2, int args1) {return null;}这个看起来好像和继承没什么关系的知识点但却并不是这样。因为子类会继承父类的非private方法所以子类也会重载父类的方法。如果子类定义了一个方法签名和父类一致的方法但参数列表不一样这就算重载了父类的方法。但我们有时并不是要这样我们更多的是希望子类定义一个和父类一样的方法签名和参数列表而里面实现的功能不一样。这样的操作叫覆写。但有时会书写失误所以我们会在覆写方法上加入Override 这样一旦我们写成了方法重载而非覆写就是报错。继承的一些特点在写完继承的写法之后我们可以看出来一下继承的特点第一继承是有一个特殊的关键字super第二维持继承关系我们可以用一个特殊的关键字protected这个上篇文章是讲过的第三很有意思的一点子类其实可以看成一个特殊的父类是父类的一种类型。下面我们具体的说一下每一点。super关键字super之前也提到过是区别于this一种关键字他一般表示的是调用方法的对象是父类的对象。那么我们就可以利用它去调用父类的方法父类的非private的成员变量。当然他和this一样也有一种特殊的应用即用它去调用父类的构造器。一般情况在调用子类的构造器之前会默认先调用父类的默认构造器如果父类没有默认的构造器那么我们在子类的构造器中就要明确用super去调用父类的构造器否则会报错。例子如下public class Father {public Father(int a){System.out.println(这是父类的构造器);}}public class Son extends Father{public Son(){super(1);}}这里一定要显式的调用父类的构造器否则编译器无法完成父类对象的构造。关于构造器的顺序初始化过程等等我们以后再详细讨论。protected关键字我们在上篇文章中已经讲过这里就不说了我们主要说第三点向上转型。向上转型我们使用继承主要是因为父类和子类之间存在一个种所属关系子类确实是父类的一种。比如我们可以把动物当做是父类子类是猫狗啊等等。猫狗确实是动物的一种。动物所拥有的方法猫狗都有所以猫狗是一种类型的动物既然如此我们就可以把猫狗向上转型成动物类型。这是安全且一定成功的。我们可以看下面的例子。public class Animal {public void run(Animal animal) {System.out.println(动物在奔跑);}}public class Dog extends Animal{public static void main(String[] args) {Animal animal new Animal();animal.run(new Dog());}}这里Animal类的run方法明确规定传入的参数是Animal类型但我们传入Dog类型也是可以成功的。这种就是向上转型的一种应用。这种转型总是成功的原因就是上面所说Dog其实是比Animal更专业更独特的类型可以看做是一个专业的类型向通用的类型转换由一个更大的类向更小的类转换这种转换除了会丢失一些方法和属性以外总会是成功的。关于向上转型还有很多要讲的内容不过这都要和多态联系到一起我们以后再说。总结继承提供了我们复用类和代码的一种方式但他并不是唯一和最好的一种当我们明确需要这种继承的关系去编写类的时候或者我们需要用到向上转型的时候我们才会用继承。如果不需要的话我们可以考虑是不是还有其他的方法。