java继承

代码存在重复,导致后果就是代码量大且臃肿,而且维护性不高(维护性主要是后期需要修改的时候,就需要修改很多的代码,容易出错),所以要从根本上解决这两段代码的问题,就需要继承,将相同的部分提取出来组成 一个父类:

继承的特性:
1,子类拥有父类非private的属性,方法。

2,子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

3,子类可以用自己的方式实现父类的方法。

4,Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。

5,提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。

所有类都继承祖先类Object类:
实现继承的关键字有两个:extend和implement
区别:extend类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
定义方法:修饰符 class 子类名 extends 父类名
举例:

public class Animal { 
private String name;   
public Animal(String myName) { 
    //初始化属性值
} 
public void eat() {  //吃东西方法的具体实现  } 
public void sleep() { //睡觉方法的具体实现  } 
} 
public class Penguin  extends  Animal{ 
}

implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
定义方法:修饰符 class 子类名 implement 接口名,接口名
举例:

public interface A {
public void eat();
}

public interface B {
public void sleep();
}

public class C implements A,B {
}

Super/This
super:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
调用父类的构造方法;
调用父类的方法(子类覆盖了父类的方法时);
访问父类的数据域(可以这样用但没有必要这样用)

class Animal{
void go(){
    System.out.println("animal go");
}

}

class Dog extends Animal{
void go(){
    //调用父类方法
    super.go();
}
}

//驱动函数
public static void  main(String[] args){
Dog dog=new Dog();
dog.go();

}
this:指向自己的引用。
调用当前类的构造方法,并且必须是方法的第一条语句。如:this(); 调用默认构造方法。this(参数); 调用带参构造方法。
限定当前对象的数据域变量。一般用于方法内的局部变量与对象的数据域变量同名的情况。如 this.num = num。this.num 表示当前对象的数据域变量 num,而 num 表示方法中的局部变量。

class Animal {
  void eat() {
System.out.println("animal : eat");
  }
}

class Dog extends Animal {
  void eat() {
System.out.println("dog : eat");
  }
  void eatTest() {
this.eat();   // this 调用自己的方法
super.eat();  // super 调用父类方法
  }
}

public class Test {
  public static void main(String[] args) {
Animal a = new Animal();
a.eat();
Dog d = new Dog();
d.eatTest();

}
}

结果:

animal : eat
dog : eat
animal : eat

final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
final 的作用随着所修饰的类型而不同,三种修饰类型:

1、 修饰类中的属性或者变量
无论属性是基本类型还是引用类型,final 所起的作用都是变量里面存放的”值”不能变。这个值,对于基本类型来说,变量里面放的就是实实在在的值,如 1,”abc” 等。而引用类型变量里面放的是个地址,所以用 final 修饰引用类型变量指的是它里面的地址不能变,并不是说这个地址所指向的对象或数组的内容不可以变,这个一定要注意。
例如:类中有一个属性是 final Person p=new Person(“name”); 那么你不能对 p 进行重新赋值,但是可以改变 p 里面属性的值 p.setName(‘newName’);final 修饰属性,声明变量时可以不赋值,而且一旦赋值就不能被修改了。对 final 属性可以在三个地方赋值:声明时、初始化块中、构造方法中,总之一定要赋值。

2、final修饰类中的方法
作用:可以被继承,但继承后不能被重写。

3、final修饰类
作用:类不可以被继承。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值