这篇博客主要是总结一下类的继承的相关知识。
1.继承的基本概念
(1)继承是面向对象三大特征之一
(2)被继承的类称为父类,继承父类的类是子类
(3)继承是指一个对象直接使用另一个对象的属性和方法
(4)通过继承可以实现代码的重用
2.继承的语法
[访问权限] class 子类名 extends 父类名
{
类定义体;
}
3.继承的限制
(1)Java只能实现单继承,也就是一个类只能有一个父类。
(2)允许多层继承,即:一个子类可以有一个父类,一个父类还可以有其他的父类。
(3)继承只能继承非私有的属性和方法
(4)构造方法不能被继承
4.子类的实例化过程
在子类进行实例化操作(也就是使用new关键字new对象的时候,这时便会调用构造方法)的时候,首先会先让其父类进行实例化操作,调用父类默认的构造方法。之后子类在自己进行实例化操作。
父类中无默认构造方法时,子类构造方法中必须必须显示的调用父类的构造方法,使用super()关键字,参数跟父类的构造方法相同。
5.方法重写
(1)定义
在java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但是有时子类并非不想原封不动的继承父类的方法,而是想作一定的修改,这就需要采用方法重写。方法重写又称方法覆盖。
(2)特性
a.发生方法重写的两个方法返回值、方法名、参数列表必须完全一致。
b.子类抛出的异常不能超过父类相应方法抛出的异常(子类的异常不能大于父类的异常)
c、子类方法的访问级别不能低于父类相应方法的访问级别(子类的访问级别不能低于父类的访问级别)
6.super关键字
(1)使用super调用父类中的属性
(2)使用super调用父类中的方法
(3)使用super调用父类中的构造方法
7.final关键字
(1)使用final关键字声明一个类
该类不能被继承
(2)使用final关键字声明一个方法
该方法不能被子类重写
(3)使用final关键字声明一个常量
该变量的值不能修改,最终的值
常量的赋值
(1)在声明的同时赋值
(2)可以通过构造方法赋值
ExtendDemo
public class ExtendsDemo {
public static void main(String args[])
{
HomeChicken homeChicken = new HomeChicken();
homeChicken.desc();
System.out.println("====================");
Pheasant pheasant = new Pheasant("小白");
pheasant.desc();
}
}
//父类
class Chicken1{
String name;
public Chicken1(String name)
{
System.out.println("Chicken:"+name);
}
public void desc()
{
System.out.println("我是一只鸡");
}
}
//子类(家鸡)
class HomeChicken extends Chicken1
{
public HomeChicken()
{
//表示父类的引用,必须是第一句
super("小白");
System.out.println("HomeChicken");
}
}
//子类(野鸡)
class Pheasant extends Chicken1
{
public Pheasant(String name)
{
super("小白");
this.name=name;
System.out.println("Pheasant");
}
}
SuperKeyWordDemo
public class superKeyWordDemo {
public static void main(String args[])
{
Duck1 duck1 = new Duck1("小黑",100);
BlackDuck blackDuck=new BlackDuck("小白",300);
blackDuck.desc();
duck1.count();
}
}
class Duck1 {
protected String name;
protected int price;
public Duck1(String name,int price)
{
this.name=name;
this.price=price;
}
public void count()
{
System.out.println("duck price is"+price);
}
}
class BlackDuck extends Duck1{
public BlackDuck(String name,int price)
{
super(name,price);
}
public void desc()
{
System.out.println("我是一只黑鸭子"+super.name);
super.count();
}
}