Java互联网架构软件工程师——第一阶段
Day08–面向对象2文章目录
前言
学习继承的多种用法和几个关键字的用法
提示:以下是本篇文章正文内容,下面案例可供参考
一、this关键字
1.1概述
代表的是本类对象 的引用
用来调用 本类里的 成员变量.方法
大多数情况下,都可以省略
必须出现的场景有两个:
—当成员变量名 和 局部变量名 相同时
—构造方法间 互相调用时
1.2 场景1—当同名的成员变量和局部变量,用this调用成员变量
代码如下(示例):
public class Test1_This {
public static void main(String[] args) {
//TODO
// new Person().show();
new Person().test();
}
}
class Person{
//当成员变量 和 局部变量 同名时,使用this
int sum = 10;
int age = 20;//成员变量
public void test(){
int age = 10 ;
age = 100 ;//改了局部变量
System.out.println(age);//局部变量,100
this.age = 200 ;//改了成员变量
System.out.println(this.age);//成员变量,200
}
public void show(){
int age = 10;//局部变量
System.out.println(age);//就近原则,使用了局部变量,10?
//TODO 使用同名的 age成员变量
//TODO this代表本类对象的引用,可以调用本类的资源
//本质上,底层帮你创建了一个本类对象,叫this
//Person this = new Person();
//场景1:当同名的成员变量和局部变量,用this调用成员变量
System.out.println(this.age);
//使用了成员变量,10
// System.out.println(this.sum);
//不同名时,可以省略this
System.out.println(sum);
}
}
1.3 场景2—构造方法间的调用
小总结:
如果想要完成 构造方法间的调用,使用this
如果this出现在构造方法里,必须是第一条语句
代码如下(示例)
//测试 this关键字
public class Test02 {
public static void main(String[] args) {
//场景2.构造方法间的调用
new Person2();
new Person2(1);
new Person2("");
}
}
class Person2{
public Person2(){
//无参构造 调用 含参构造 --- 必须是第一条语句
this("小明");
System.out.println(1);
}
public Person2(int age){
// 含参构造 调用 无参构造 ---必须是第一条语句
this();
System.out.println(2);
}
public Person2(String name){
System.out.println(name);
}
}
二、访问控制符
用来控制一个类,或者类中的成员的访问范围。
三、继承
3.1 概述
是父类和子类之间的关系;继承只有一个父类;子类继承父类之后,就拥有了父类的全部功能
好处:提高了父类里代码的复用性,减少了子类代码的编写
3.2 特点
—使用extends关键字
—相当于子类把父类的功能复制了一份
—java只支持单继承
—继承可以传递(爷爷,儿子,孙子的关系)
—不能继承父类的私有成员
—继承多用于功能的修改,子类可以拥有父类的功能的同时,进行功能拓展
—像是is a 的关系
代码如下(示例):
//测试 继承
public class Test3_Extends {
public static void main(String[] args) {
//创建子类对象测试
// new Son().eat();//使用了爸爸类里方法
new Son().xiaqi();//使用了爷爷类里方法
}
}
//4,父类 抽取子类的 共性代码
class Yeye{
public void xiaqi(){
System.out.println("爷爷泡的茶");
}
}
class Baba extends Yeye{
//6,父类的私有成员 ,无法被继承
private void eat(){//提高复用性
System.out.println("吃肉");
}
}
//1,使用关键字extends表示继承关系
//5,java只支持单继承
class Son extends Baba{
//3,继承关系是一种强制的依赖关系-强耦合
//2,子类可以使用父类的所有功能
}
3.3 super关键字
—1,用在子类里.调用父类的数据
—2,super如果出现在构造方法里,必须是第一条语句
3.4 方法的重写(override)
3.4.1 概述
前提:发生父子关系
子类继承了父类后,子类可以使用父类的所有内容,而且子类还可以添加扩展的功能,而且子类还能改(重写)父类的功能.
3.4.2 特点
–发生在子类中,想改父类原来的功能
–在子类中的方法声明/方法签名 和父类一样
–方法声明: 方法的返回值 方法名(参数列表
3.5 继承的使用
3.5.1 继承的 成员变量 使用
1,子类想要用父类的成员变量,通过super使用
2,super在底层帮你创建了一个父类的对象
3,通过super使用父类的功能
代码如下(示例):
// 测试 使用 继承 成员变量的使用
public class Test04 {
public static void main(String[] args) {
new z().show();
new z().name();
}
}
class f{
String name = "小小";
public void name() {
System.out.println(88);
}
}
class z extends f{
String name = "jack";
int age = 10;
public void show() {
int age = 20;
System.out.println(age);//就近原则,使用局部变量
System.out.println(this.age);//使用成员变量
System.out.println(name);//用了自己的jack
//想要在子类中,用父类的name?---使用 super
//super 表示父类对象的一个引用,专门用来调用父类的功能
//f super = new f();
super.name="rose";//修改父类的变量
System.out.println(super.name);
//System.out.println(super.name());
}
3.5.2 继承的 成员方法 使用
1,子类继承父类后,
2,可以使用父类的所有功能(除了private)
3,还可以进行功能扩展
4,还可以 修改 父类的功能–重写–在不影响父类原有功能的前提下,把子类的功能进行修改
5,重写的要求:继承关系+有权限+方法声明和父类一样
6,开闭原则OCP:关闭源码修改,开放功能扩展
代码如下(示例):
// 测试 继承的 成员方法 使用
public class Test05 {
public static void main(String[] args) {
new zi2().id();
new zi2().sex();
}
}
class f2{
public void id() {
System.out.println(2144);
}
public void sex(){
System.out.println('女');
}
}
//子类可以继承父类的
class zi2 extends f2{
public void name() {
System.out.println("小小");
}
//改变父类的功能---方法的重写
//要求: 子类的方法声明必须和父类一样+有足够的权限
public void sex() {
// super.sex();//调用父类的sex(),原来的功能没有任何影响
System.out.println('男');
}
}
3.5.3 继承的 构造方法 使用
1,子类继承了父类后,构造方法里,默认隐藏着super()
2,当父类中不存在无参构造时(只提供了含参构造),子类只能调用父类的含参构造
3,父类的构造方法 可以被继承吗 --不可以
4,哪些资源不可以继承 —私有的+构造方法
代码如下(示例):
//测试 继承的 构造方法
public class Test06 {
public static void main(String[] args) {
//先执行父类的构造方法 -- super(),在执行自己的
new zi3();
}
}
class f3{
public f3(){
System.out.println(120);
}
public f3(int i){
System.out.println(888);
}
}
class zi3 extends f3{
public zi3(){
//隐藏的,默认就存在,而且在第一条语句;
//主动找到了父类的 无参构造 方法
super();
//super(6);//无参构造没了!!
System.out.println("父类的构造方法");
}
}
四、扩展
4.1 overload和override的区别
overload是重载:
在一个类里的现象.
方法名相同参数列表不同.
好处是:体现程序的灵活
override是重写:
在父子关系中,子类里的现象.
好处是:不影响原来的功能,改的是子类的.
要求:继承关系+有足够的权限+方法声明和父类一样
4.2 this和super的区别
—this代表本类对象,用来调用本类的成员变量/方法
—super代表父类对象,用来调用父类的成员变量/方法
—在构造方法里出现时,都得是第一条语句.
—this和super不能同时出现.
该处使用的url网络请求的数据。
总结
继承这个部分对于面向对象来说非常重要,要多练,多理解,后面才能学得轻松,加油!学习java的日子