继承

继承:
一、为什么需要继承?
解决代码重复的问题
二、理解继承
(一)、子类访问父类成员
1、使用super关键字
2、 访问父类属性: super.name;  
3、 访问父类方法: super.print();
 (二)、 有些父类成员不能继承 
1、private成员  
2、子类与父类不在同包,使用默认访问权限的成员 
3、构造方法 
(三)、访问修饰符总结

(四)、集继承后的初始化顺序
 父类属性 ----> 父类构造方法  ----> 子类属性----> 子类构造方法

Object关键字
  在Java 中,所有的Java类都直接或间接地继承了java.lang.Object类
 
final关键字
Java中声明类、属性和方法时,可使用关键字final来修饰。注意事项: 
1、final标记的类不能被继承。
2、 final标记的方法不能被子类重写。
3、 final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。 
4、public static final共同标记常量时,这个常量就成了全局的常量。
 eg:1、public static final int MAXCOUNT=10; 
         2、final Sting NAME=“SUN”; 

 子类重写父类方法
即子类中有和父类相同签名的方法

构造方法也会被重写吗? 不能被继承因此不能重写 

一个类能得到构造方法,只有两个办法。 
1、写构造方法: 可以在子类构造方法中用super(参数列表)调用父类的构造方法并且super()必须是第一个被执行的语句 
2、有构造方法,使用缺省构造方法 

抽象类
一、什么叫抽象类?

以下代码有什么问题? 
Pet pet = new Pet ("贝贝",20,40);
 pet.print();
初始化父类实例对象Pet,没有实际意义,因为所有的宠物不可能都叫“贝贝”

所以Java中也使用抽象类,限制父类无意义的实例化
public abstract class Pet {         
 
 
抽象方法
abstract也可用于方法——抽象方法 
几点说明:
1、抽象方法没有方法体 
2、抽象方法必须在抽象类里 
3、抽象方法必须在子类中被实现,除非子类是抽象类 
 
final用法  
final用于:
1、类不希望再被其他类继承
public final class Penguin extends Pet {      
//…
 }
2、 方法不希望被重写
public final void print () {      
//… 
}  
3、 属性值不希望被修改

多态
一、为什么使用多态?
例如宠物生病了,需要主人给宠物看病 不同宠物看病过程不一样,所以需要多态。 简单来说,多态是具有表现多种形态的能力的特征  同一个实现接口,使用不同的实例而执行不同操作 
二、如何使用多态
使用多态实现思路 
1、编写父类 
2、编写子类, 子类重写父类方法 
3、运行时,使用父类的类型,子类的对象
例:
父类:
abstract class Printer(){
     print(String str);
 } 
子类1:
class ColorPrinter () extends class Printer{
     print(String str) {        
 System.out.println("输出彩色的"+str);     
子类2:
class BlackPrinter ()  extends class Printer{     
print(String str) {         
System.out.println("输出黑白的"+str);     
}
调用
public static void main(String[] args) {
     Printer p = new ColorPrinter();//用子类初始化父类对象     
     p.print();     
     p = new BlackPrinter();     
     p.print();
 } 

方法重写
一、方法重写的规则 
1、在继承关系的子类中
2、 重写的方法名、参数、返回值类型必须与父类相同 
3、私有方法不能继承因而也无法重写
二、方法重写与方法重载的区别
1、方法重载是在初始化时,对默认初始化方法进行修改
2、发放重写是子类对父类的同名方法进行修改 

instanceof运算符 
public class TestPoly2 {     
public static void main(String[] args) {        
     // Pet pet = new Penguin("楠楠", "Q妹");         
    Pet pet = new Dog("欧欧", "雪娜瑞");         
    pet.eat();         
    if (pet instanceof Dog) {    //判断该对象是不是Dog类        
     Dog dog = (Dog) pet;            
     dog.catchingFlyDisc();         
    } else if (pet instanceof Penguin) {            
     Penguin pgn = (Penguin) pet;            
     pgn.swimming();         
    }     





 












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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值