java学习第八天继承,抽象类,接口

日期:2019年11月13日
1.子父类中的构造函数的特点:
在子类构造对象时发现,访问子类构造函数时,父类构造函数也运行了。为啥?
答:在子类的构造函数中第一行默认的隐式语句,super();
**注意:**之类的实例化过程:子类中所有的构造函数默认都会访问父类中的空参数的构造函数。
为什么子类实例化的时候要访问父类中的构造函数?
答:因为子类继承了父类,获取到了父类的内容(属性),所以在使用父类内容之前,要先看父类是如何对自己的内容进行初始化的。
所以子类在构建对象时,必须访问父类中的构造函数。为了完成这个必须的动作,就在子类的构造函数中加入了super()语句。
如果父类中没有定义空参数的构造函数,那么子类的构造函数必须用super明确要调用的父类中的哪个构造函数。同时子类构造函数中如果使用this调用了本类构造函数时,那么super就没有了,因为super和this都只能定义在第一行,、所以只能有一个。但是可以保证的是,子类中肯定有其他的构造函数访问父类的构造函数。
注意:super语句必须要定义在子类构造函数的第一行,因为父类的初始化动作要先完成。

2.一个对象的实例化过程

//一个对象的实例化过程
Person p=new Person();
//1.jvm会读取指定的路径下的Person.class文件,并加载进内存。并会先加载Person的父类(如果有直接的父类的情况下)。
//2.在堆内存中开辟空间,分配地址
//3.并在对象空间中,对对象中的属性进行默认初始化
//4.调用对应的构造函数进行初始化。
//5.在构造函数中,第一行会先调用父类中的构造函数进行初始化
//6、父类初始化完毕后,在对子类的属性进行显示初始化。
//7、、再进行子类构造函数的特定初始化。
//8.初始化完毕后,将地址值赋值给引用变量。

3.final关键字
final可以修饰类、方法、变量。
final修饰的类不可以被继承。
final修饰的方法不可以被覆盖。
final修饰的变量是一个常量,只能被赋值一次。
内部类只能访问被final修饰的局部变量。
**注意:**继承弊端:打破了封装性。
为什么要用final修饰变量,其实在程序中如果一个数据是固定的,那么直接使用这个数据就可以了,但是这样阅读性差,所以给该数据起个名称。而且这个变量名的值不能变化,所以加上fianl固定。
写法规范:常量所有字母大写,多个单词,中间用_连接。
**4.抽象类:**抽象:不具体。
特点:1.方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰。抽象方法必须定义在抽象类中,该类必须被abstract修饰。
2.抽象类不可以实例化,因为调用抽象方法没有意义。
3.抽象类必须有其子类覆盖了所有的抽象方法后,该类才可以实例化。否则这个类还是抽象类。

问题:
1.抽象类中有构造函数吗?
答:有,用于给子类对象初始化。
2. 抽象类可以不定义抽象方法吗?
答:可以,但是很少见,目的就是不让该类创建对象。AWT的适配器对象就是这种类。
通常这个类中的方法有方法体,但是没有内容。
3.抽象类不可以和那些关键字共存?
答:private static final
4. 抽象类和一般类的异同点:
答:相同点:抽象类与一般类都是用来描述事物的,都在内部定义了成员。
不同点:1.一般类有足够的信息描述事物。抽象类描述事物的信息可能不足。
2.一般类不能定义抽象方法,只能定义非抽象的方法。抽象类可以定义抽象方法,也可以定义非抽象方法。
3.一般类可以被实例化,抽象类不可以被实例化。
5. 抽象类一定是个父类吗?
答:是的,因为需要子类覆盖其方法后才可以对子类实例化

//小测试:雇员测试:
//需求:公司中程序员有姓名,工号,薪水,工作内容。
//项目经理除了有姓名,工号,薪水,还有奖金,工作内容。
//对给出需求进行数据建模

5.接口::当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一种形式定义和表示,就是接口interface。
格式: interface 接口名{
抽象方法
};
对于接口interface当中常见成员:而且这些成员都有固定的修饰符。
1.全局常量:public static final 数据类型 变量名=值;
2.抽象方法:public abstract void 方法名();
特点:接口中的成员都是公共的权限。
接口:类与类之间是继承关系,类与接口之间是实现关系。
接口不可以实例化,只能由实现接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化,否则,这个子类就是一个抽象类。
接口的实现:implements

**继承与接口:**在java中不直接支持多继承,因为会出现调用的不确定性。所以java将多继承机制进行改良,在java中变成了多实现。
一个类可以实现多个接口。
**注意:**接口与接口之间是继承关系,而且接口可以多继承。

接口特点:
、1.接口是对外暴露的规则
	2接口是程序的功能扩展
	3.接口可以用来多实现
	4.类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
	5.接口与接口之间可以有继承关系。.

接口与抽象类区别:
1.相同点: 都是不断向上抽取而来。
2.不同点:1.抽象类需要被继承,而且只能单继承。接口需要被实现,而且可以多实现。
2.抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。
接口中只能定义抽象方法,必须有子类去实现。
3.抽象类的继承,是is a关系,在定义该体系的基本共性内容。
接口的实现是has a 关系,在定义体系额外的功能。
接口的引用:
1.定义规则:定义接口 interface A {}
2.使用规则(main函数):用一个类B使用这个接口 class B{ void use(A a){} }
3.实现规则:用另一个类C实现接口。 class C implements A{ }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值