博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象 继承 抽象类 接口 static 权限修饰符
阅读量:5886 次
发布时间:2019-06-19

本文共 6661 字,大约阅读时间需要 22 分钟。

Day01 面向对象 继承 抽象类 接口 static

1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。

2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法

 

父类抽取出了共性的内容,子类可以在父类基础上扩展新的属性与方法。

子类拥有父类的所有属性与方法,无需重新定义。并且可以直接使用非私有的父类成员

1.1 -子类中访问父类成员方法特点

l 子父类中成员方法的特点

当在程序中通过对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法

 

_面向对象_构造方法

1).任何的类中都有构造方法,如果我们不定义,系统会自动添加一个

   默认(公有、无参、什么都不做的)构造方法。

class Student{

public Student(){

}

}

2).每次"创建对象"时,都会自动执行"构造方法"

3).构造方法的作用:初始化成员属性

4).构造方法的定义格式:

访问修饰符 构造方法名(同类名)(形参){

 

}

 

Super关键字:::当子父类中出现了同名成员变量时,在子类中若要访问父类中的成员变量,必须使用关键字super来完成。

 

一般的访问不需要使用this关键字,但有些情况必须使用:

1).在某个方法内,局部变量覆盖了成员变量,此时要访问别覆盖的成员变量,

   必须使用:this.成员变量名

class Student{

String name;

public void setName(String name){

this.name = name;

}

}

 

_面向对象_this关键字

1).this是每个类中都有的一个成员变量,由编译器自动添加的;

2).每当创建一个对象时,JVM会自动将这个对象的"引用"赋值给这个this变量;

3).它表示:引用当前对象的.....(成员属性、成员方法等)

   也就是,通过this可以访问"当前对象""成员"

class Student{

private String name;

public void setName(String name){

this.name = name;

}

public void getName(){

return this.name;//表示:当前对象的,name成员属性

}

}

 

6.1.charAt(int index):获取这个字符串中某个索引位置上的字符

5.boolean endsWith(String str):判断当前字符串是否以str结尾;

6.int indexOf(String str):查找str在当前字符串中的位置。如果没找到,返回-1

 

注意:以上对字符串操作的所有方法,都不能改变原字符串,都是生成一个新的字符串;

 

  1. 每次创建子类对象时父类的class文件也会进入内存中。目的在于子类对象中包含了其对应的父类存储空间,便可以包含其父类对象的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。

代码体现在子类的构造方法调用时,一定先调用父类的构造方法。

 

1.2 8.抽象类&抽象方法的使用

抽象类无法直接创建对象,只能被子类继承后,创建子类对象。

子类需要继承抽象父类并完成最终的方法实现细节(即重写方法,完成方法体)。而此时,方法重写不再是加强父类方法功能,而是父类没有具体实现,子类完成了具体实现,我们将这种方法重写也叫做实现方法。

 

1.3 抽象类常见疑惑

l 抽象类一定是个父类,因为抽象类时不断抽取共性需求而来的。

l 抽象类中是可以不定义抽象方法的,此时仅仅是不让该类创建对象,用于某些特殊的设计需要

l 设计时由具体类抽取出抽象类,而开发阶段应该先定义抽象父类,再根据不同需求由父类定义子类。

l  }

l 03.面向对象_继承_thissuper关键字

l  1).this:

l  1).任何类中都有一个this成员变量;

l  2).当创建对象时,由JVM为其赋值,赋值为当前对象的引用

l  3).通过this可以访问本类的成员属性、成员方法、构造方法;

l  2).super:

l  1).任何类中都有一个super成员变量;

l  2).当创建对象时,由JVM为其赋值,赋值为父类对象的引用;

l  3).通过super,可以访问父类中的成员变量、成员方法、构造方法;

 

 

1.1 thissuper

1.1.1 子类对象产生

在每次创建子类对象时,父类的class文件也会进入内存中目的在于子类对象中包含了其对应的父类存储空间,便可以包含其父类对象的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。

 

8.面向对象_继承_子类覆盖父类的成员方法(方法重写)

1).有时候,子类需要保留父类的功能(方法名),但需要做不同的事情。

   这时,子类就可以定义一个跟父类那个方法"一模一样"的方法,用来覆盖父类中的原方法。

   这种形式就叫:方法的重写

2).重写规则:

1).子类方法的"访问修饰符"必须跟父类相同,或者比父类更宽;

从宽到窄:public,protected,(默认)

2).子类方法的:返回值类型,方法名,形参列表必须与父类方法完全相同

3).可以使用@Override强制重写验证;Eclipse会按照重写的语法规则检查你的方法。

3).重写的注意事项:

1).父类的"私有方法"由于不能被继承,所以谈不上被重写

2).静态方法不能被重写;

4).重写的作用:

保留了父类的功能(相同的方法名),而且实现了子类特有的行为(子类方法内特有的行为)

 

1.

接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。

1.4 2.接口中成员的特点

1、接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。后面我们会讲解staticfinal关键字

2、接口中可以定义方法,方法也有固定的修饰符,public abstract

3、接口不可以创建对象。

4、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。

5.由于犬分为很多种类,他们吼叫和吃饭的方式不一样,在描述的时候不能具体化,也就是吼叫和吃饭的行为不能明确。当描述行为时,行为的具体动作不能明确,这时,可以将这个行为写为抽象行为,那么这个类也就是抽象类。

可是当缉毒犬有其他额外功能时,而这个功能并不在这个事物的体系中。这时可以让缉毒犬具备犬科自身特点的同时也有其他额外功能,可以将这个额外功能定义接口中。

 

6.相同点:

都位于继承的顶端,用于被其他类实现或继承;

都不能直接实例化对象;

都包含抽象方法,其子类都必须覆写这些抽象方法;

区别:

抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;

一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)

抽象类为继承体系中的共性内容,接口为继承体系中的扩展功能

 

1.1 抽象类&抽象方法的使用

抽象类无法直接创建对象,只能被子类继承后,创建子类对象。

子类需要继承抽象父类并完成最终的方法实现细节(即重写方法,完成方法体)。而此时,方法重写不再是加强父类方法功能,而是父类没有具体实现,子类完成了具体实现,我们将这种方法重写也叫做实现方法。

抽象类是拥有构造方法的,其存在的意义在于对自身进行初始化,供其子类使用。

 

 

二者的选用:

优先选用接口,尽量少用抽象类;

需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

3.父类引用指向子类对象就是多态的定义格式。同一个父类的方法会被不同的子类重写为各自的具体实现。在调用方法时,调用的为各个子类重写后的方法。

父类类型  变量名 = new 子类类型();

变量名.方法名();

此时,虽然该变量指向的是子类对象,但表现为一个父类的形态,可以调用一切父类的方法,子类特有的方法将不能调用。

 

1.5 多态调用注意事项

成员变量编译看父类中是否存在,不存在编译失败

l 成员变量运行父类中的变量

成员方法编译看父类中是否存在,不存在编译失败

l 成员方法运行子类重写的方法

 

  多态的弊端: 不能调用子类的特有方法

 

.面向对象_多态_多态中成员的访问_总结

1.多态时,访问的任何成员,在父类中必须存在;否则编译错误(不能访问子类特有成员)

2.多态时,访问被子类覆盖的成员属性--访问的是父类的 编译看左边,运行看左边 Person p = new Student();

System.out.println(p.num1);

 

  多态时,访问被子类重写的成员方法--访问的是子类的      编译看左边,运行看右边 Person p = new Student();

p.show();//访问的是子类的

 

  多态时,访问的静态方法--访问的是父类的 编译看左边,运行看左边

 

 

1.6 static特点

static是静态修饰符,一般修饰成员。static修饰的成员属于类,不属于单个这个类的某个对象

static修饰的成员被多个对象共享。

static修饰的成员属于类,但是会影响每一个对象。

static修饰的成员又叫类成员,不叫对象的成员。

1.7 2.静态代码块

静态代码块是定义在成员位置,使用static修饰的代码块。

特点:

l 它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。

l 该类不管创建多少对象,静态代码块只执行一次。

可用于给静态变量赋值,用来给类进行初始化。

public class Person {

private String name;

private int age;

 //静态代码块

static{

System.out.println("静态代码块执行了");

}

}

 

四种访问权限修饰符

 

要想仅能在本类中访问使用private修饰;

l 要想本包中的类都可以访问不加修饰符即可;

要想本包中的类与其他包中的子类可以访问使用protected修饰

要想所有包中的所有类都可以访问使用public修饰。

注意:如果类用public修饰,则类名必须与文件名相同。一个文件中只能有一个public修饰的类。

 

 

3.

04.面向对象_static关键字_注意实现_静态代码块00000000000000000000000000000000000000000000000

1).static关键字的注意事项:

1).一个类中的"静态成员""普通成员"分配内存空间的时机是不一样的。

   "静态成员"无论任何情况下,都比"普通成员"先分配内存。

   "静态成员"是在"第一次使用这个类"的时候,就会被分配空间。

2).在静态的方法内,不能直接访问"非静态成员";只能访问"静态成员"

   在普通的方法内,可以访问静态成员和普通成员;

3).在静态方法内,不能使用thissuper关键字;(thissuper是在创建对象时,JVM才会为其赋值)

2).静态成员如果使用"构造方法"初始化有些晚了。

   可以使用静态代码块为静态成员属性初始化。

3).静态代码块是定义在"类体中"

class Student{

static String schoolName;

static{

schoolName = "传智播客北京校区";

}

}

4).静态代码块只在"第一次使用这个类"的时候被执行一次,之后再也不会被执行了。

5).静态代码块的作用:初始化静态成员;

 

4.

一个问题:abstract关键字不能和哪些关键字共存?

1).final : 因为final类不能被继承abstract类就是被继承的;方法也是一样;所以冲突;

2).private : abstract法就是被子类重写的private的方法不能被继承,也就不能被重写,所以冲突;

3).static : static方法第一次使用这个类时就要被分配空间abstract的方法没有方法体,无法被分配空间;所以冲突;

另一个问题:当对于"成员变量",如果被修饰为static,很有可能也需要被修饰为final

class Student{

static final String schoolName = "传智播客北京校区";

 

}

 

 

1.1 接口概念

接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。

接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。

请记住:一切事物均有功能,即一切事物均有接口。

 

1.1 接口中成员的特点

1、接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。后面我们会讲解staticfinal关键字

2、接口中可以定义方法,方法也有固定的修饰符,public abstract

3接口不可以创建对象。

4、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。

1.8 Day04面向对象

这时就会想,那么我们能不能不创建对象,就可以调用方法呢?

static是静态修饰符,一般修饰成员。static修饰的成员属于类,不属于单个这个类的某个对象

static修饰的成员被多个对象共享

static修饰的成员属于类,但是会影响每一个对象

static修饰的成员又叫类成员,不叫对象的成员。

2.静态代码块是定义在成员位置,使用static修饰的代码块。

特点:

它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。

l 该类不管创建多少对象,静态代码块只执行一次

可用于给静态变量赋值,用来给类进行初始化。

l 3.要想仅能在本类中访问使用private修饰;

l 要想本包中的类都可以访问不加修饰符即可;

要想本包中的类与其他包中的子类可以访问使用protected修饰

要想所有包中的所有类都可以访问使用public修饰。

注意:如果类用public修饰,则类名必须与文件名相同。一个文件中只能有一个public修饰的类。

 

 

所以多态的存在意义(优点)为:

配合继承与方法重写提高了代码的复用性与扩展性,如果没有方法重写,则多态同样没有意义。

 

    多态的弊端: 不能调用子类的特有方法

 

 

  1. String str =new String(“hello”)  上面语句中变量str放在栈上, new创建出来的字符串对象放在堆上,hello 这个字面量是放在方法区的

 

 

第1章 四种访问权限修饰符

 

Java中提供了四种访问权限,使用不同的访问权限时,被修饰的内容会有不同的访问权限,以下表来说明不同权限的访问能力:

 

 

public

protected

空的(default)

private

同一类中

同一包中(子类与无关类)

√ 

 

不同包的子类

 

 

不同包中的无关类

 

 

 

 

归纳一下:在日常开发过程中,编写的类、方法、成员变量的访问

 

要想仅能在本类中访问使用private修饰;

 

l 要想本包中的类都可以访问不加修饰符即可;

 

要想本包中的类与其他包中的子类可以访问使用protected修饰

 

要想所有包中的所有类都可以访问使用public修饰。

 

注意:如果类用public修饰,则类名必须与文件名相同。一个文件中只能有一个public修饰的类。

 

l 什么时候使用内部类

在描述事物时,若一个事物内部还包含其他可能包含的事物,比如在描述汽车时,汽车中还包含这发动机,这时发动机就可以使用内部类来描述。

 

转载于:https://www.cnblogs.com/shan1393/p/8944879.html

你可能感兴趣的文章
mysql中常用动词_MySQL 常用
查看>>
mysql如何匹配_如何在mysql中匹配
查看>>
python编译exe用于别的电脑上_Python安装教程(推荐一款不错的Python编辑器)
查看>>
flash back mysql_mysqlbinlog flashback 使用最佳实践
查看>>
hive中如何把13位转化为时间_sqoop1 导入 hive parquet 表中 时间戳调整为日期
查看>>
mysql书外键_[转] mysql 外键(Foreign Key)的详解和实例
查看>>
mysql存储引擎模式_MySQL存储引擎
查看>>
python入门小游戏代码_【Python】Python代码实现“FlappyBird”小游戏
查看>>
pytorch增加一维_pytorch 数据维度变换
查看>>
ie includes语法报错_HTML5基础:JS有哪些变态语法
查看>>
php的mysql的分区_详细介绍mysql中的分区
查看>>
云服务器怎么卸载mysql数据库_mysql 删除数据库脚本
查看>>
mysql 5.5.57互为主从_MYSQL 5.5.18 互为主从配置成功
查看>>
mysql5002_mysql新手进阶02
查看>>
python类 del_全面了解Python类的内置方法
查看>>
前后端传图片用base64好吗_前后端分离 前台传base64的图片 tp5.1.1进行处理
查看>>
java对象的排序_Java对象排序两种方法
查看>>
java jni 原理_使用JNI技术实现Java和C++的交互
查看>>
java 重写system.out_重写System.out.println(String x)方法
查看>>
java 生成对称密钥_java中以DES的方式实现对称加密并提供密钥的实例
查看>>