第六天学习java-(4月22日)-千峰教程

第六天学习java-(4月22日)-千峰教程

【方法的覆盖】
方法覆盖的原则:方法名称 参数列表 返回值类型 与父类相同
访问的修饰否不能比父类更加严格
由于方法的重写实应为继承的原因,所以才会涉及到修饰符和返回的类型
方法覆盖的执行:
子覆盖父类方法后,调用时会优先调用子类的覆盖的方法
在子类快捷生成父类的方法:
直接在子类里面输入父类的方法,回车然后就会出来然后删除不重要的值,留下注解和方法名以及参数和名称
注解的作用:就是验证方法重写是否符合规范,是否和子类的一样
【super关键字的使用】
在子类中,可以直接访问从父类继承到的属性和方法,如果子类的属性或者方法存在重名(属性遮蔽,方法覆盖时),需要加以区分,才可以专项访问。
使用场景:
当子类继承了父类之后进行了方法的重写,需要调用服了方法的重写的时候。使用supper关键字,然后supper.方法名,可以调用,还可以调用服了父类的构造方法
例如:
public class TestSu{
public static viod main(String[] args){
B b =new B();
b.upload();

}

}
class A{
public void upload(){

}

}
class B extends A{
public viod upload(){
//调用父类的upload方法,这里相当于提高代码的复用性,因为服了里面要含有这个功能,子类在这个方法里方法里面多加了一些
super.upload();

}

}
【打印局部变量或者是实例变量变量】
class A{
public void upload(){
int value=10;
}

}
class B extends A{
int value =20;
public viod upload(){
int value =30;
super.upload();
System.out.print(value); // 30打印局部变量 ,由于局部变量与实例变量之间,局部变量优先级高一下
System.out.print(this.value);//20 这是打印当前地址里面value(this表示的是引用当前类里面的成员变量)
System.out.print(super.value);//10 这是继承过来的值

}

}

【继承中对象的创建】
在具有继承关系的对象创建中,构建子类对象会先构建父类对象
由父类的共性内容,叠加子类的独有内容,组成完整的子类对象
总结:由于要构造子类对象就需要先构造父类对象,然后在构造子类的独有属性,这样得到的在子类对象就会复制父类对象里面的东西
继承对象的创建过程:
首先执行性父类的构造方法,然后在执行子类的构造方法,然后在进行类中属性的加载,在执行子类的构造方法的时候,第一句会默认加载super():这句话,如果自己写了系统就不会在加载了(调用的父类的无参构造方法)的意思是先执行父类的构造方法。
创建的顺序:

父类静态属性
父类静态代码块
子类静态属性
子类静态代码块
父类实例属性
父类实例代码块
父类构造方法
子类实例属性
子类实例代码块
子类构造方法
【super调用父类的有参数的构造方法】
和调用无参数的构造方法是一样的,但是的自己在调用有参数的写上super(实参);否则不写的话就会默认调用父类无参数的构造方法。
注意:this(),和super()在构造方法中调用的时候不能同时写,在构造方法中,这两个关键字都需要写在首行,
【程序中的多态】
概念:父类引用指向子类对象,从而产生多种形态
格式: 首先是子类继承了父类,然后用 父类的类型 实例化子类
例如:
1.前提是Dog类继承了Anima类
2.从语法层面来讲(自动类型转换),Dog是Animal中的一种
Animal a = new Dog();
//父类引用仅可以调用父类所申明的属性和方法,不可以调用子类独有的属性和方法
【多态中的方法覆盖】
如果子类中覆盖了父类中的方法,以父类类型引用调用此方法时,优先执行父类还是子类的方法?
如果子类重写了父类的方法,那么调用父类被重写了的方法是属于调用子类的方法
(就向看见了火蝾螈,然后火蝾螈爬病史是指动物怎么爬的而是指的是火蝾螈怎么爬)
【多态的应用场景】
场景一:
使用父类作为方法的形参实现多态,使用的方法参数类型更加广泛
场景二:
使用父类作为方法返回值实现多态,使用方法可以返回不同的子类对象
场景一 :
例如:
// 在同一个包中
public class Person{
String name;
int age;
public void eat(){
System.out.print(this.name);

}
public void hello(Person person){//这里的利用了多态,这里将参数变得更加宽泛,当子类重写了调用的方法,就会执行之类的方法
	System.out.print(this.name+"您好");
	person.hello();
}

}
public class Student extends Person{
String sex;
public void hello(){
System.out.print(“我是学生您好”);
}

}
public class Teach extends Person{
String leval;
public viod hello(){
System.out.print(“您好我是教师”)

}

}
public calss Test{
public static void main(String[] agres){
Person person =new Person();
Student student=new Student();
Teach teach=new teach();
person.hello(teach);
person.hello(student);

}

}
场景二:使用父类作为方法返回值实现多态,使用方法可以返回不同的子类对象
例如:
//前提是Dog类和Cat类都继承了Animal类
public class Master{
public void buy(int choie){
Animal animal =null;
if(choie == 1 ){
//可以通过后面直接进行类型new
animal =new Dog();
}else if(choie == 2){
animal =new Cat();
return animal;
}

}
public class Test{
public static viod main(String[] args){
Master master=new Masyer();
Sytem.out.print(“请输入需要购买的动物”)
Scaner input=new Scaner(Sytem.in);
choie=input.nexInt();
Animal anima1=Master.buy(choie);
if(animal!=null){
System.out.print(“成功”);
}else{
System.out.print(“失败”);
}

}

}
【向上转型】(装箱)
Animal a = new Dog(); 这个称为向上转型,即多态的核心概念(父类在上 ,子类在下,所以是Animal 转变为其中的子类之后就是有个向上转型 以实际类型看向定义类型)
【向下转型】(拆箱)
例如:
//Annimal 是 Dog()和Cat()的父类
Animal animal = new Dog(); //向上转型,这个只能调用父类的方法除了重写
Dog dog =(Dog)animal;//向下转型(前提是必须进行向上转型然后在乡下转型),这个能调用子类的独有方法同时也是继承的 // 但是继承的还能否访问呢?
【类型转换异常】就是没有向上转化类型就直接向下转换类型的时候回报错
报出类型不匹配:
【instanceof】关键字
作用:向下转型前,应该判断引用中的对象的真是类型 ,保证类型转换的的正确性
语法:引用 instanceof 类型 // beelean类型的结果
public class TestConver{
public static void main(String[] agrs){
Animal animal=new Dog();
// 判断这个的类型是否是这种类型 ,返回的值是boolean类型
if(animal instanceof Dog){
// 向下转型
Dog dog=(Dog)animal;
}else if(animal instanceof Cat){
Cat cat=(Cat)animal;

}

}
【多态的总结】
父类引用指向子类对象,从而产生多种形态
多态的两种引用场景:
使用父类作为参数的形参,实现多态
使用父类作为方法返回值,实现多态
多态的作用:
屏蔽子类间的差异
灵活,耦合度低

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值