这是我在博客园发的第一篇文章,所以我有必要做一些介绍或者说明
首先我是一名大二在校学生,我第一次接触csdn是在大一上学期。我是学计算机类专业的,但是大一我识编程的时候,我连编程是什么都不知道,我很捉急。我甚至有点后悔选择了这个令人头秃的专业,那个时候我连cv发抖不会,我问了一些师兄师姐,他们很耐心,我觉得非常安逸,他们给我讲解了一些问题,他们叫我不懂多百度。
我就在百度发现了csdn,在这里学到了很多东西,到现在我还在优快云里面找资料来学习,我看到有些帮助很大,所以决定自己也写一写,我不喜欢作笔记,但我现在开始要写笔记了,我也会把自己写的一些笔记放到优快云里面供一些初学者参考借鉴,希望能够记录自己学习的同时帮助到一些初学者。由于本人知识有限,难免会存在一些偏差或者错误,如有读者看到,希望在评论区告知本人,帮助我修改的同时也比,避免带偏更多读者
说完了,那么我会分享些什么呢?首先我是计算机类专业的,我会分享一下计算机相关基础知识,物联网一些东西,我的主要学习方向是javaweb,所以我还会分享一些html+css+js等前端知识和java,计算机网络等知识。
下面是的第一篇文章,我想先分享一些java
Java三大特性之一----------继承
什么是继承?
-
继承是面向对象的三大特征之一.
-
也是实现软件复用的重要手段.
-
Java继承具有单继承的特点, 每个子类只有一个直接父类.
-
所谓继承就是一个类**(子类)保留了另外一个类(父类)的一些(非私有)**属性或者方法
继承如何实现?
Java的继承通过extends关键字实现
Java类继承的格式如下
修饰符 class SubClass extends SuperClass
{
//类定义部分
}
下面我们通过一个具体的例子来看一下java的继承机制如何实现
首先我写了一个动物类
package parent;
public class Animal {
public int age;
public String name;
public void eat() {
System.out.println(name+"吃东西"+"它今年"+age+"岁了");
}
}
然后写了一个子类(狗)
package child;
import parent.Animal;
public class Dog extends Animal{
}
可以看到我的子类什么也没有,但是他继承自父类Animal,父类的非私有属性和方法他都可以用
下面我写一个测试类来调用继承自父类的方法和属性
package test;
import child.Dog;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Dog dog = new Dog();
dog.name="小花";
dog.age=2;
dog.eat();
}
}
运行程序我把输出结果放在下面
小花吃东西它今年2岁了
上面的列子我们可以看到Dog的定义的中没有属性和方法的声明,但是我们在测试类中却可以调用它的一些属性和方法,原来我们在调用一个类的成员时,他首先会去看自己有没有,如果自己没有就会去看他的直接父类有没有,再去找间接父类有没有,直到找到为止,那如果找不到呢?找不到很简单,报错嘛,所以我们就看到了上面的运行结果
这里有几点注意事项和说明,也是新手非常会犯错误的地方
-
Java的子类不能继承父类的构造器.
-
Java不支持多继承,只能单继承,但是Java支持多级继承
-
Java的类如果没有显示声明继承的父类,那么默认会继承java.lang.Object类,Object类是所有类的根类,也就是说java的所有类都直接或者间接的继承继承自这个类。
上面的我们自是用子类调用父类的成员,有时候我们不仅仅是简单继承,我们需要对父类的方法进行修改,增加一些方法,增加一些属性,我们这里说的是增加没有全部重新写,体现java继承优点之一,增加了代码的复用性。关于java继承的其他好处,我们后面再统一列出
下面我会修改Dog类,让他与父类有些不同
package child; import parent.Animal; public class Dog extends Animal{ public boolean sex; @Override public void eat() { System.out.println(name+"吃骨头"+"它今年"+age+"岁了"); } public void printSex() { if(sex==true) System.out.println("男"); else System.out.println("女"); } } package test; import child.Dog; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Dog dog = new Dog(); dog.name="小花"; dog.age=2; dog.eat(); dog.sex=true; dog.printSex(); } } 输出结果: 小花吃骨头它今年2岁了 男
可以看到这个测试中我们同样调用eat方法,但输出和之前不一样,这是因为我在这里重写了父类的eat方法,当子类重写了方法之后,再调用这个方法时,他就会调用自己的方法,那么什么是重写呢?怎样重写呢?
这种子类包含与父类同名方法的现象称为方法重写(Override). 也被称为方法重写,也可以说子类覆盖了父类的方法
方法重写也要注意以下几点:
-
方法名相同 / 形参列表相同
-
子类方法返回值类型应比父类方法返回值类型小或相等. / 子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等.
-
子类方法的访问权限应比父类方法的访问权限大或相等.
-
继承的优点与缺点
- A:继承的好处
- a:提高了代码的复用性
- b:提高了代码的维护性
- c:让类与类之间产生了关系,是多态的前提
- B:继承的弊端
- 类的耦合性增强了。