黑马程序员-【JAVA基础】-继承与接口

时间:2021-07-24 00:43:35

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1.继承的概念

  把多个类中相同的成员给提取处理定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容,叫继承。

2.继承的格式:关键字extends

 class 子类名 extends 父类名{}

3.继承的好处:

1)提高了代码的复用性

2)提高了代码的维护性

3)让类与类之间产生了一个关系,是多态的前提

4.继承的弊端

1)让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类

原则:底耦合,高内聚

耦合:类与类之间的关系 内聚:自己完成某件事情的能力

2)打破了封装性

5.java中继承的特点

1)JAVA类中只支持单继承

2)JAVA中可以多层继承

注意:1)子类不能继承父类的私有成员

   2)子类不能继承父类的构造方法,但可以通过super去访问

   3)不要will部分功能而去继承

6.JAVA继承中的成员关系

1)成员变量:

(1)子类的成员变量名称和父类的成员变量名称不一样

(2)子类的成员变量名称和父类的成员变量名称一样,如何访问

子类的方法范围变量的查找顺序;

在子类方法的局部范围找,有就使用

在子类的成员范围找,有就使用

在父类的成员范围找,有就使用

找不到就报错。

2)构造方法

(1)子类的构造方法默认会去访问父类的无参构造方法

(2)父类中如果没有无参构造方法

子类通过super去明确调用带参构造

子类通过this调用本身的其他构造,但是一定会有一个区访问了父类的构造,让父类提供无参构造

3)成员方法

(1)子类的成员方法和父类中的成员方法名称不一样

(2)子类的成员方法和父类中的成员方法名称一样

      通过子类对象访问一个方法的查找顺序:

  在子类中找,有就使用;在父类中找,有就使用;找不到,就报错

class Person {
public void eat() {
System.out.println("吃饭");
}

public void sleep() {
System.out.println("睡觉");
}
}

class Student extends Person {}

class Teacher extends Person {}

class ExtendsDemo {
public static void main(String[] args) {
Student s = new Student();
s.eat();
s.sleep();
System.out.println("-------------");

Teacher t = new Teacher();
t.eat();
t.sleep();
}
}
7.接口定义:接口从本质上说是一种特殊的抽象类,关键字interface

在接口中,所有的方法为公开,抽象的方法:pubic abstract

在接口中,所有的属性都是公开,今天的常量:public static final

接口与接口之间可以多继承,用extends,多个之间用逗号隔开

接口中没有构造方法,不能用new 接口名来实例化一个接口,但可以声明一个接口

8.接口:全部的方法都是抽象方法,全部的属性都是常量

1)接口是特殊的抽象类

2)接口用来表示纯抽象概念,没有任何具体的方法和属性

3)接口不能实例化,可以定义变量

4)接口变量可以引用具体实现类的实例

5)接口只能被实现,一个具体类实现接口,必须使用全部的抽象方法

6)接口之间可以继承

7)一个具体类可以实现多个接口,实现多继承现象

8)实现一个接口,使用关键字:implements

/*所有的小汽车都能跑,停,可以抽象成为借口*/
interface Car{
void run();
void stop();
}
interface Product{
double getPrice();
}
class QQ implements Car ,Product{
public double getPrice() {
// TODO Auto-generated method stub
return 3000;
}
public void run() {
System.out.println("启动出发");
}
public void stop() {
System.out.println("刹车");

}
}
public class QQDemo{
public static void main(String[] args) {
//创建一个QQ汽车
QQ qq=new QQ();
//QQ汽车是一个产品
Product p=qq;
//输出产品的价格
System.out.println(p.getPrice());
//QQ是一辆车
Car car=qq;
car.run();
car.stop();
//这个产品是一辆车
Car c=(Car)p;
c.run();
c.stop();
}
}