目录
方法的覆盖是指子类中定义一个方法,并且这个方法的名字,返回类型,参数列表与父类继承的方法完全相同。
一.概述
面向对象程序设计的三大原则是封装性,继承性和多态性。继承性是子类自动共享父类的数据和方法的机制,它是由类的派生功能体现的。继承具有传递性,使得一个类可以继承另一个类的属性和方法,这样通过抽象出共同的属性和方法组成新的类,便于代码的复用。而多态是指不同类型的对象调用相同的方法时产生不同的行为 。当对象接收到调用方法的消息时,根据该对象所属的类,动态选用在该类中指定要实现的算法。
二.继承
2.1 继承的概述

猫,狗,鸟都是动物的一种,分别具有同一样的特征。例如:名字,年龄等。亦拥有同样的行为,如吃这个动作。当然,每种不同的动物也有自己的独特的特征,这里就不一一列举了。
在面向对象的程序设计中该怎样描述现实世界的这种状况呐?这就用到了继承的概念。
所谓继承,就是从已有的类中衍生出新的类,新的类具有已有类的数据属性和行为,并能扩展新的能力。像动物这样被继承的类,我们称为父类,基类或超类,对于像猫和狗这样的类,我们称为子类,派生类。和现实生活中的儿子继承父亲的财产类似,子类也会继承父亲的属性和方法,已达到代码重用的效果。
2.2继承的语法规则
.使用extends指定父类
.java中一个字类只能继承一个父亲
.子类会继承父类所有的public属性和方法
.对于父亲的private的属性和方法,子类中是无法访问的
2.3代码示例
public class Animal{
public String name ;
pub;ic int age;
public Aniaml (String name,int age){
this.name = name;
this.age = age;
}
public void eat(String foood){
System.out.ptintln(this.name + "正在吃" + food);
}
}
//子类Cat
class Cat extends Animal{
public Cat(String name,int age){
//使用super关键字调用父类的构造方法.
super(name,age);
}
public void eat(String food){
System.out.println("猫猫:" + this.name + "正在吃" + food);
}
}
//子类Dog
class Dog extends Aniaml {
public Dog(String name, int age){
super(name,age);
}
public void eat(String food){
System.out.println("狗狗:" + this.name + "正在吃" + food);
}
}
由上我们可以看出,子类自动继承父类的属性和方法,子类中不再存在重复的代码,从而实现代码的重用。子类继承父类所有的成员变量和成员方法,但不能继承父亲的构造方法。在子类的构造方法中,可使用语句super(参数列表)调用父类的构造方法,如子类构造方法中的语句super(name,age)。
2.4类中属性,方法的继承与覆盖
1.属性的继承与覆盖
子类可以继承父类的所有非私有属性。
子类也可以覆盖继承的成员变量,对于子类可以从父类继承的成员变量,只要子类中定义的成员变量和父类中的成员变量同名,子类就覆盖了继承的成员变量。
当子类执行它自己定义的方法时,所操作的就是它自己定义的数据成员,,从而覆盖父类继承来的数据成员。
2.方法的继承与覆盖
父类中非私有( private )方法可以被子类所继承。
在子类继承父类的成员方法时,应注意一下两项:
*子类不能访问父类的 private 成员方法,但子类可以访问父类的 piblic ,protected 成员方法。
*访问 protected 时,子类和同一包内的方法都能访问父类的 protected 成员方法,但其他方法不能访问。
子类和父类之间,概念上的关系是is-a的关系。
方法的覆盖是指子类中定义一个方法,并且这个方法的名字,返回类型,参数列表与父类继承的方法完全相同。
注意事项
1.重写和重载完全不一样。
2.普通方法可以重写,static修饰的静态方法不能重写。
3.重写中子类的方法的访问权限不能低于父类的方法的访问权限。
4.重写的方法返回值类型一定和父类的方法相同。
另外,针对重写的方法,可以使用@override注解来显式指定,有了这个注解能帮我们进行一些合法性校验,例如不小心将方法名字拼写错了,那么编译器就会发现父类中没有这个方法,就会编译报错,提示无法构成重写。
2.4super关键字
子类不能继承父类的构造方法。
如果父类中没有默认构造方法或希望调用带参数的父类构造方法,要使用关键字super来显示调用父类方法。使用关键字super来调用父类构造方法的语句,必须是子类构造方法的第一个可执行语句。调用父类构造方法时,传递的参数不能是关键字this或当前对象的非静态成员。
三.多态
3.1多态的概述:
多态顾名思义, 就是"一个引用,能表现出多种不同的形态"。多态主要是向上转型+方法覆写。
3.2向上转型
父类名称 父类引用 = new 子类实例();
Animal animal = new Dog();//向上转型,子类是天然的父类类型,dog is an animal。
向上转型的最大意义在于参数统一化,我们可以用一个父类引用,接收所有子类实例。
一共发生在三个位置:
1.直接赋值:Animal animal = new Dog();
2.方法参数传递:func(new Dog()); public void fun (Animal animal ){}
3.方法返回值向上转型: public Animal test(){ return new Dog(); }
3.3多态的好处
a.降低使用者的门槛
b.方便扩展
四.final关键字(终结器)
1.final修饰属性,表示该属性为常量,值不能让修改。
2.final修饰类,表示该类不能有子类。
3.final修改方法,表示该方法无法被覆写。
本文详细介绍了Java中面向对象的两大特性——继承和多态,包括继承的概念、语法规则、属性与方法的继承与覆盖、super关键字的使用,以及多态的概述、向上转型和多态带来的好处。同时,还讨论了final关键字在类、属性和方法中的应用。
748

被折叠的 条评论
为什么被折叠?



