java基础2

Java 中继承的特点

  • 只支持单继承
  • 子类只能继承父类的非私有的成员和方法
  • 子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法

this与super的区别

this代表本类对应的引用
super代表父类存储空间的表示
怎么用?

  • 调用成员变量
    • this.成员变量 调用本类的成员变量
    • super.成员变量 调用父类的成员变量
  • 调用构造方法
    • this(...):调用本类的构造方法
    • super(...):调用父类的构造方法
  • 调用成员方法
    • this.成员方法:调用本类的成员方法
    • super.成员方法:调用父类的成员方法

继承中构造方法的关系

子类中所有的构造方法默认都会访问父类中的空参数的构造方法
为什么呢?

  • 因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化
  • 每一个构造方法的第一条语句默认都是:super()

如果父类中没有无参构造方法,该怎么办呢?

  • 子类通过super去显示调用父类其他的带参的构造方法
  • 一定要注意:
    • super(...)或者this(...)必须出现在第一条语句上
    • 否则,就会有父类数据的多次初始化

final关键字

final的特点

  • final可以修饰类,该类不能被继承
  • final可以修饰方法,那么该方法就不能被子类所重写
  • final可以修饰变量,该变量不能被重新赋值

被final修饰的变量只能赋值一次
final int num;num = 10或者
final int num = 10;

多态

同一个对象,在不同的时刻体现出来的不同状态
多态的前提:
A:要有继承关系
B:要有方法重写
C:要有父类指向子类对象
父类 f = new 子类()
f调用的方法只能是被子类重写的方法
<u>多态体现在表面上调用父类的方法,其实调用的是子类的方法!</u>

多态的成员访问特点:
A:成员变量
编译看左边,运行看左边
B:构造方法
创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边(静态和类相关,算不上重写,所以,访问还是看左边的)

多太的弊端,不能使用子类的新功能(即没有重写的方法)
解决方法:可以借助向下转型
子类 z = (子类)f

class KongZiDad{
    int age = 40;
    public void teach(){
        System.out.println("教Java");
    }
}

class KongZi extends KongZiDad{
    int age = 20;
    public void teach(){
        System.out.println("教论语");
    }
    public void playGame(){
        System.out.println("英雄联盟");
    }
}

class HelloWorld{
    public static void main(String[] args) {
        KongZiDad kzd = new KongZi();
        System.out.println(kzd.age);  // 40
        kzd.teach();  // 教论语
        // kzd.playGame(); 无法调用
        KongZi kz = (KongZi)kzd; 
        System.out.println(kz.age); // 20
        kz.teach(); // 教论语
        kz.playGame(); // 英雄联盟
    }
}

如何更好的理解多态呢?

多态类的内存图

抽象类

定义了抽象方法的类是抽象类

abstract class Animal{
    public abstract void eat();
}

抽象类有构造方法,但抽象类不能实例化。抽象类中的构造方法是子类访问父类的初始化数据。
抽象类的子类问题:

  • 抽象类的子类没有重写抽象方法,扔是一个抽象类,不能实例化
  • 如果重写了抽象类中的所有抽象方法,就是普通的子类,可以实例化
  • 可以通过多态的方式对抽象类进行实例化
    抽象类 obj = new 子类()

抽象类的成员

  • 成员变量:既可以是变量,也可以是常量
  • 成员方法:既可以是抽像的,也可以是非抽像的
  • 构造方法:有

接口

格式:interface 接口名 {}
实现:class 类名 implement 接口名 {}
注意:

  • 接口不能实例化
  • 如果要实例化,按照多态的方式,由具体的子类实例化。其实这也是多态的一种,接口多态
    接口的子类:
  • 要么是抽样类
  • 要么重写接口中的所有抽象方法

接口中成员的特点:

  • 成员变量默认是 public static final
  • 接口没有构造方法(所有类默认继承Object类)
  • 成员方法默认是 public abstract

抽象类和接口区别

抽象类:被继承,体现的是“is a”的关系,抽象类中定义的是该继承体系的共性功能
接口:被实现,体现的是“li'ke a”的关系,接口中定义的是该继承体系的扩展功能

类名,抽象类名,接口名做为参数传递问题

1.类名作为形参和返回值类型,跟不同类型一样
2.抽象类名:因为抽象类不能实例化,必须借助多态实现

  • 抽象类名作为形参传递
abstract class Person {
    public abstract void study();
}

class PersonDemo {
    public void method(Person p) {//p; p = new Student();  Person p = new Student(); //多态
        p.study();
    }
}

//定义一个具体的学生类
class Student extends Person {
    public void study() {
        System.out.println("Good Good Study,Day Day Up");
    }
}

class PersonTest {
    public static void main(String[] args) {
        //目前是没有办法的使用的
        //因为抽象类没有对应的具体类
        //那么,我们就应该先定义一个具体类
        //需求:我要使用PersonDemo类中的method()方法
        PersonDemo pd = new PersonDemo();
        Student p = new Student();
        pd.method(p);
    }
}
  • 抽象类名作为返回值类型
abstract class Person {
    public abstract void study();
}

class PersonDemo {
    public Person getPerson() {
        //Person p = new Student();
        //return p; 
        return new Student();
    }
}

class Student extends Person {
    public void study() {
        System.out.println("Good Good Study,Day Day Up");
    }
}

class PersonTest {
    public static void main(String[] args) {
        PersonDemo pd = new PersonDemo();
        Person p = pd.getPerson(); //new Student();  Person p = new Student(); 
        p.study();
    }
}

3.接口名同上

权限修饰符

权限修饰符:
                    本类  同一个包下(子类和无关类)   不同包下(子类)    不同包下(无关类)
        private     Y       
        默认      Y       Y
        protected   Y       Y                           Y
        public      Y       Y                           Y               Y
    修饰符:
        权限修饰符:private,默认的,protected,public
        状态修饰符:static,final
        抽象修饰符:abstract
        
    类:
        权限修饰符:默认修饰符,public
        状态修饰符:final
        抽象修饰符:abstract
        
        用的最多的就是:public
        
    成员变量:
        权限修饰符:private,默认的,protected,public
        状态修饰符:static,final
        
        用的最多的就是:private
        
    构造方法:
        权限修饰符:private,默认的,protected,public
        
        用的最多的就是:public
        
    成员方法:
        权限修饰符:private,默认的,protected,public
        状态修饰符:static,final
        抽象修饰符:abstract
        
        用的最多的就是:public
        
    除此以外的组合规则:
        成员变量:public static final
        成员方法:public static 
                  public abstract
                  public final

内部类

把类定义在其他类的内部,这个类就被称为内部类
内部类的访问特点:

  • 内部类可以直接访问外部类的成员,包括私有
  • 外部类要访问内部类的成员,必须创建对象

内部类的详细介绍:Java内部类详解

当我们编译的时候,不仅会生成外部类的class文件,还会生成内部类的class文件,格式是外部类名$内部类名.class

匿名内部类

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,753评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,668评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,090评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,010评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,054评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,806评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,484评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,380评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,873评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,021评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,158评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,838评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,499评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,044评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,159评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,449评论 3 374
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,136评论 2 356

推荐阅读更多精彩内容

  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,540评论 0 6
  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 467评论 0 2
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,655评论 0 11
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,792评论 0 10
  • 悲风寒树泣江皋,黑雨苍山浪怒号。 鹰隼长空逞远大, 鱼虾浅底跃蓬蒿。 百年疆土驱群鬼, 万古云天挥一毛。低首胁肩庆...
    公子向北走了阅读 929评论 3 7