oop_day04&day05笔记整理

1.继承:java继承是定义一种新的类型,从已有的类中吸收成员变量和方法,新的类型可以添加新的方法和成员变量。
子类:也叫派生类;
父类:也叫超类,基类。
关键字extends,用于继承语法
格式:
public class subClass extends SuperClass{
}
继承的作用: 这种方式可以提高代码的复用性,缩短开发周期,减少开发费用。
继承中的构造器:子类不能继承父类的构造器;但子类中的构造器可以调用父类的构造器;语法: super(有参传参);
调用父类构造器的作用:可以更好的给继承过来的成员变量赋值;
PS:子类中的构造器至少有一个方法调用了父类的构造器,父类中如果没有无参构造器,子类需要显式调用父类构造器, 如果父类中有无参构造器,子类中的构造器可能隐式调用了父类的无参构造器.即:隐藏了super() 。
super()与this()的区别
相同点:都是调用构造器,而且必须放在首行首句。
不同点:super()是调用父类的构造器;
this()是调用本类中其他构造器 ;
super(有参传参)与this(有参传参),不能同时存在。
继承的传递性:
继承特征有传递特性,B类型继承了A类型的特征,C类型继承了 B类型的特征。C类型也间接继承了A类型的特征
继承的另外一特点:
单继承: 一个子类只能继承一个父类。但是一个父类可以有多个子类。
PS.jDk1.8及以上版本可以多继承。
【一个源文件中,只能有一个public修饰的类,而且此类必须与文件名一致。其他类可以不用修饰词,main也需要在public修饰的类中,才能生效。】

2.方法的重写:
子类可以重新编写继承父类的方法。
(1)方法名相同,参数列表相同;
(2)返回值类型可以相同,也可以是父类方法的返回值类型的子类型;
(3)修饰词可以不变,或者可以比父类的修饰权限更大。
父类型的变量可以引用子类型的对象:
如:
Animal a = new GoldFish();
Animal类型的变量a引用了子类型GoldFish的对象
符合人类的思维:这条金鱼是动物。
3.变量能调用的方法与成员变量:
方法:
编译期: 变量只能调用出本类型中的方法;在编译期间,方法静态绑定到变量上;
运行期:在运行过程中,真正执行的方法的逻辑与对象的类型有关系。简单说成:方法在运行期间,动态绑定到对象上。
成员变量的调用与变量的类型有关系(与编译期和运行期无关)。
变量调用出的成员变量一定是本类型中的成员变量;
如:Person p = new Student();
p.name——>super.name
p.age ——>super.age
//p.score—->编译错误,p类型中没有成员变量score
【在创建子类对象时,在内存中会不会产生父类对象??】
【答案1: 会产生,没有父类对象,哪来的子类对象】
【答案2: 不会产生,创建子类对象时,子类对象的成员变量包含两部分:
一部分为从父类中继承过来的
在成员变量前有默认的super.
一部分是自己本类中的
在成员变量前有默认的this.

    如果子类中独有的与继承过来的成员变量重名时,必须
    显式指定使用super.或者是this.
    如果子类中没有与继承过来的成员变量相同名时,我们可以
    隐式不写,或者使用super.与this.其中任意一个。         

     为了避免不必要的麻烦,子类的成员变量尽可能不要与父类的
     成员变量同名】   

4.Object:是所有引用类型的顶级父类,系统会默认引用类型extends Object;
此类中提供了常用的方法:
(1):toString()方法:
在Object中,返回的是类全名@HashCode值, 即对象在内存堆中的位置信息 。
此方法会在输出变量时,或引用变量进行拼接时默认调用。
类有类名和类全名之分:
类名:即最短的名称;
类全名:从包名开始写的名称;
如: String 是类名;
java.lang.String是类全名。
通常不需要查看地址信息,通常要查看的是对象的成员变量信息,
因此需要重写toString()方法,用于查看对象的详情。
格式:”[成员变量1=”+成员变量1+”,成员变量2=”+成员变量2+”]”
(2)equals(Object obj)方法:
Object类型中的此方法的逻辑是比较调用者this与形参obj
的地址信息是否相等。
简单说成:比较this与obj是不是同一个对象;
所以在定义类型时,继承过来的equals方法 我们要重写。
重写规则:
(1) 查看传进来的obj是不是null
if(obj==null){
return false;
}
(2) 查看传进来的obj是不是this.
if(obj==this){
return true;
}
(3) 查看传进来的obj是不是本类型
if(obj.getClass()!=this.getClass()){
return false;
}

if(!(obj instanceof Person)){
return false;
}
5.instanceof关键字:
作用是判断引用变量指向的对象是否属于某一类型

语法:
boolean f = 变量名 instanceof 类型名
6.package: 包.
作用:用于管理源文件,区分类全名
命名规则:域名后缀.域名.项目名.模块名;
声明位置:在源文件的首行首句。
类全名:从包开始写起的名称
常用的包:
java.lang.*,因为里面的类型非常常用。因此不需要导包;
java.util.*,此包下封装了很多常用的工具类;
java.io.*,此包下封装了io流的类型;
java.net.*,此包下封装很多关于网络的多种类型。
7.import: 导包关键字
在class之上,package之下。
用于声明类的类全名,在逻辑中就可以使用短的类名;
优点: 可以减少代码的书写。
8.访问权限控制修饰词:
Private(私有的),protected(受保护的),public(公用的),默认的(default)
修饰类时:
外部类:可以使用public和默认的;
内部类:可以使用public,protected,默认的,private
修饰成员变量:四个都可以进行修饰,但可见性不一样;
本类中 同包下 不同包子类中 其他
public true true true true
protected true true true
default true true
private true
true表示可见。
在实际开发中,成员变量要尽可能的设置成不可见,好处是,提高代码的安全性。即用private修饰为了在其他类中可以对成员变量进行重新设置值或者获取值,可以定义相应成员变量的共有方法来进行操作。
public void setName(String name){
this.name = name;//修饰成员变量的值
}
public String getName(){
return name;
}
修饰方法:与修饰成员变量的可见性一致。
方法的重写:子类不能重写父类的私有方法 。
9.修饰词final:最终的,最后的
(1)修饰类:被final修饰的,不能再有子类了。
(2)修饰成员变量:
可以直接初始化,也可以在构造器中初始化,不能在其他任何地方再次赋值。
修饰局部变量:只能初始化一次。
(3)修饰方法:被final修饰的方法,不能在子类中重写 。
10.常量:
因为常量是一些特殊值,可以定义成final, public,static进行修饰。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值