JAVA三大特色之二:继承

继承:

1.顾名思义,继承就是“is a”的关系。就是某个东西得到另外一个东西的(属性)和(方法)!在java中就是一个类属于某个类的子类。

/*如果父类中的某个属性用private 关键字进行修饰之后,那这个属性或这是方法就不能被子类所继承。*/

2.继承的语法规则。

public class Animal  {
	public int age = 10;
	public String name;
	public void eat() {
		System.out.println("动物具有吃东西的能力。");
	}
	public Animal() {
		System.out.println("Animal类执行了!");
		//age = 20;
	}
   
}
public class Dog extends Animal {
  public int age = 20;
  public void eat() {
	  System.out.println("狗具有吃东西的能力!");
  }
  public Dog() {
	  System.out.println("Dog类执行了!");
  }
  public void method() {
	  eat();
  }
//Dog类代码并不完整!!!!

在上述代码中,就是Dog类继承Animal这个父类!

class 子类名 extends 父类名 {...........}

加上extends关键字,两个类之间的继承关系就成立了!

3.子类方法的重写。

如果对父类的方法不满意,可以在子类中重写此方法,在调用方法是会优先调用子类的方法。

方法重写的语法规则:

返回值类型;

方法名;

参数类型及其个数;

都要与父类方法相同才可以。
4.继承时的初始化顺序。

先初始化父类再初始化子类。

先执行初始化对象的属性,再执行构造方法中的初始化!

5.final关键字的使用。

final可以修饰类,属性,方法,变量。

final 就是不可修改不可变化。final修饰类,则该类不能被继承。

                                             final修饰方法,则该方法不允许被覆盖(重写)。

                                             final修饰属性,则该类的属性就不会被进行隐式初始化(类的属性初始化必须有值)

                          或在构造方法中被初始化(赋值)(只能任选其一)。

                                              final修饰变量,则该变量就只能被赋值一次,即变为常量。

6.继承中super关键字的使用。

  在继承中会经常用到super关键字来简化代码。

访问父类的属性:

super.属性名;

访问父类的方法:

super.方法名;

super应用:子类的构造过程当中必须调用其父类的构造方法。

public class Dog extends Animal {
	
  public int age = 20;
  public void eat() {
	  System.out.println("狗具有吃东西的能力!");
  }
  public Dog() {
	  super();
	  System.out.println("Dog类执行了!");
  }
  public void method() {
	  eat();
  }
在Dog()的构造方法中,正因为有super()才会调用父·类的构造方法。但是就算程序里不写super(),运行的的时候依然会调用父类的构造方法。因为在继承的子类程序中系统会隐式的写上super(),所以这里写不写super()它都会调用父·类的构造方法。

如果想要显示,那么super()就要放在子类构造方法中的第一行。

(如果子类的构造方法中既没有显示调用父类的构造方法,而父类又没用无参的构造方法,就会编译错误!)


7.Object类

Obuject是所有类的父类,在一个类没有明确用extends关键字指明与另外一个类的关系时,那么系统默认它为Object的子类!

Object类是所有类的子类,它的方法也同样适用于所有类。

常见的方法有toString()方法。返回对象的 haxicode码。haxicode码就是一个对象的储存地址字符串化。比如:

public class Initail {

	public static void main(String[] args) {
		Dog dog = new Dog();
        Dog dog2 = new Dog();
        dog.age = 15;
        dog2.age = 15;
        /*if(dog.equals(dog2)) {
        	System.out.println("两个对象是相同的");
        } else {
        	System.out.println("两个对象并不相等");
        }*/
        System.out.println(dog);

	}

test2.Dog@3c679bde 这个就是haxicode码是dog这个对象的地址。


equals()方法。

equals()方法类似 “==”。

public class Initail {

	public static void main(String[] args) {
		Dog dog = new Dog();
        Dog dog2 = new Dog();
        dog.age = 15;
        dog2.age = 15;
        if(dog.equals(dog2)) {
        	System.out.println("两个对象是相同的");
        } else {
        	System.out.println("两个对象并不相等");
        }
       

	}

}
如果我单独用equal()方法来判断dog和dog2对象是否相等,结果是不相等的。

因为直接用equal()方法进行比较,比较的是dog对象和dog2对象的地址,可他们的地址是肯定不相等啊!

所以要单独写equal()方法。

public class Dog extends Animal {
	
  public int age = 20;
  public void eat() {
	  System.out.println("狗具有吃东西的能力!");
  }
  public Dog() {
	  super();
	  System.out.println("Dog类执行了!");
  }
  public void method() {
	  eat();
  }

@Override
public boolean equals(Object obj) {
	if (this == obj)   //看两个引用的值是否相同(地址是否相同)!
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())//判断两个类的类型是否相同!
		return false;
	Dog other = (Dog) obj;
	if (age != other.age)//两个对象的属性值是否相同!
		return false;
	return true;//这样就可以判断两个对象是否相同了。
}
  
}

这样在执行原代码结果就是相同的了!
if (getClass() != obj.getClass())//判断两个类的类型是否相同!
getClass()是可以得到一个类对象。这个有区别于Dog dog = new Dog();这种类的对象。

类对象描述的是类的代码信息;类的对象更关注类的属性值的信息,简言之就是数据信息!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值