JAVA之继承,
JAVA之继承,
JAVA三大特性之继承
一:概念
继承是类与类之间的关系,并且在java中,一个类只有一个父类,也就是单继承的关系。
二:好处/优点
1):子类拥有父类的所有属性和方法(private修饰的无效)
2):可以实现代码的复用
三:语法规则
class 子类 extends 父类{....}
public class Animal { //父类Animal
public int age;
public String name;
public void eat(){
System.out.println("动物具有吃东西的能力");;
}
}
public class Dog extends Animal{}//子类Dog继承父类Animal
public class Init { //测试类
public static void main(String[] args) {
Dog dog=new Dog();
dog.age=10;
dog.name="xiaobai";
dog.eat();
}
}
四:方法的重写
如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时,会优先调用子类重写的方法
语法规则:返回值类型,方法名,参数类型和个数都要与父类继承的方法相同,才叫方法的重写。
五:继承初始化顺序
1:初始化父类再初始子类
2:先执行初始化对象中属性,再执行构造方法中的初始化。
也就是父类-->父类中的属性-->父类的构造方法-->子类-->子类中的属性-->子类的构造方法
//父类
public class Animal {
public int age=5;
public String name;
public void eat(){
System.out.println("动物具有吃东西的能力");;
}
public Animal(){
age=20;
System.out.println("Animal类的构造方法执行了!");
}
}
//子类
public class Dog extends Animal{
public Dog(){
System.out.println("Dog类的构造方法执行了!");
}
}
//初始化类
public class Init {
public static void main(String[] args) {
Animal animal=new Animal();
System.out.println("Animal age="+animal.age);
Dog dog=new Dog();
}
}
运行结果为:
六:final关键字
final修饰类,则该类不允许被继承
final修饰方法,则该方法不允许被覆盖(重写)
final修饰属性,则该属性不会进行隐式的初始化(类的初始化属性必须要有值)或在构造方法中赋值(但只能选其一)
final修饰变量,则该变量的值只能赋一次值,即变为常量.
七:super关键字
在对象的内部使用,可以代表父类对象。使用规则为:super.属性/方法
子类的构造过程当中必须调用其父类的构造方法.。
super的应用:
1):如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法.
2):如果显示的调用构造方法,则必须出现在子类的构造方法的第一行
如果子类构造方法中既没有显示调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。
//父类
public class Animal {
public int age=10;
public String name;
public void eat(){
System.out.println("动物具有吃东西的能力");;
}
public Animal(){
System.out.println("父类的构造方法执行了!");;
}
}
//子类
public class Dog extends Animal{
public Dog(){
super();//这句代码是隐式创建的。
System.out.println("子类的构造方法执行了!");
}
}
//测试类
public class Init {
public static void main(String[] args) {
Dog dog=new Dog();
}
}
运行结果:
八: Object类
Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类
1:toString()方法
在Object类里面定义toString()方法的时候返回的对象的哈希码(对象地址字符串)
可以通过重写toString()方法表示出对象的属性
//父类
public class Animal {
public int age=10;
public void eat(){
System.out.println("动物具有吃东西的能力");;
}
@Override
public String toString() {
return "Animal [age=" + age + "]";
}
}
//子类
public class Dog extends Animal{}
//测试类
public class Init {
public static void main(String[] args) {
Dog dog=new Dog();
System.out.println(dog);
}
}
运行结果:
2:equals()方法
用来比较的是对象的引用是否指向同一内存地址
//父类
public class Animal {
public int age=10;
public void eat(){
System.out.println("动物具有吃东西的能力");;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Animal other = (Animal) obj;
if (age != other.age)
return false;
return true;
}
}
//子类
public class Dog extends Animal{}
//测试类
public class Init {
public static void main(String[] args) {
Dog dog=new Dog();
Dog dog1=new Dog();
dog.age=15;
dog1.age=15;
if(dog.equals(dog1)){
System.out.println("两个对象是一样的");
}
else{
System.out.println("两个对象是不一样的");
}
}
}
相关文章
- 暂无相关文章
用户点评