1.外部类与内部类

1) 外部类是不能直接使用内部类的成员和方法滴

2) 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字 外部类类名.this.

例:this.HelloWorld.name

3)如果内部类和外部类不具有相同的成员变量或方法,可以直接声明使用。

2.包

一.包的作用:管理Java文件,解决同名文件冲突
  二.定义包:package 包名
//必须放在Java源程序的第一行
包名间可以使用“.”隔开
三.系统中的包:
java.(功能).(类)
java.lang.(类) 包含Java语言基础的类
java.util.(类) 包含Java语言中各种工具类
java.io.(类)  包含输入,输出相关功能的类
四.包的使用:
1.可以通过使用import关键字,在某个文件使用其他文件中的类
2.Java中,包的命名规范是全小写字母拼写
3.使用的时候不但可以加载某个包下的所有文件 eg:com.imooc.*
也可以加载某个具体子包下的所有文件

3.成员内部类

//外部类HelloWorld
public class HelloWorld{//外部类的私有属性nameprivate String name = "imooc";//外部类的成员属性int age = 20;//成员内部类Innerpublic class Inner {String name = "爱慕课";//内部类中的方法public void show() { System.out.println("外部类中的name:" +  HelloWorld.this.name); //在内部类中使用与内部类重复的外部类变量System.out.println("内部类中的name:" +  name);System.out.println("外部类中的age:" + age);}}//测试成员内部类public static void main(String[] args) {//创建外部类的对象HelloWorld o = new HelloWorld (); //注意创建内部类的对象  是利用外部类的对象进行声明Inner inn = o.new Inner();    //调用内部类对象的show方法inn.show();}
}

4.静态内部类: 相比于成员内部类,此类可以直接定义

如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

//外部类
public class HelloWorld {// 外部类中的静态变量scoreprivate static int score = 84;// 创建静态内部类public static class SInner {// 内部类中的变量scoreint score = 91;public void show() {System.out.println("访问外部类中的score:" + HelloWorld.score);System.out.println("访问内部类中的score:" + score);}}// 测试静态内部类public static void main(String[] args) {// 直接创建内部类的对象SInner si = new SInner();// 调用show方法si.show();}
}

5.继承:

方法的重写,构造的先后顺序为先父类后子类

final一经使用,对于变量则不可改变,对于方法和类不可以继承

package com;//包名 compublic class inital {public static void main(String[] args) {// TODO Auto-generated method stubAnimal animal = new Animal();System.out.println(animal.age);Dog dog = new Dog();//构造的时候先父类再子类//dog.age=10;//继承dog.name="xiaotian";//dog.eat();//重写//dog.method();}}
package com;public class Animal {  //finalpublic int age=20;public String name;/*public Animal()//final public Animal() 定义成final后不可被子类继承  也要注意构造方法的格式 如果变为了public void Animal则不为构造方法{System.out.println("Animal执行了");age=10;}*//*public Animal(int a)         //有参的构造函数{System.out.println("Animal执行了");age=10;}*/public void eat() {               //final int a=20;//a=10;System.out.println(name+"动物具有吃东西的能力");}}
package com;public class Dog extends Animal {public int age=200;public Dog(){//super(); super相当于显示的调用父类的构造方法,系统一般默认的调用已经存在的构造方法System.out.println("Dog执行了");}public void eat() {     //方法的重写System.out.println(name+"狗具有吃东西的能力");}public void method(){//System.out.println(age);System.out.println(super.age);}
}

6.重写方法(调用Source)

toString方法如果没有重写,直接输出的是它的地址

重写后输出的是它的属性值

equal方法如果没有重写,比较的是2个变量的地址

重写后比较的是它的属性值

7.类型转换

强制转换与instanceof(判断2个是否属于同一类型)

package project3;public class Animal {public void eat(){System.out.println("111Animal");}
}
package project3;public class Cat extends Animal {}
package project3;public class Dog extends Animal {public void eat(){System.out.println("222Dog");}
}
package project3;public class Initial {public static void main(String[] args) {// TODO Auto-generated method stub/*  Animal a1 = new Animal();Animal a2 = new Dog();  //父类的引用是可以指向子类的Animal a3 = new Cat();a1.eat();a2.eat();a3.eat();//错误  Dog    a3 = new Animal();*/Dog dog = new Dog();Animal animal = new Dog();//把父类看成基层,所以为向上类型转换// Cat cat = (Cat) animal; //1 编译时 Cat类型  2运行时 Dog类型if(animal instanceof Dog) {Dog dog2 = (Dog)animal; //强制向下类型转换 }else {System.out.println("无法进行类型转换Dog"); } if(animal instanceof Cat) {Cat cat = (Cat)animal; //强制向下类型转换 }else {System.out.println("无法进行类型转换Cat");}}}

8.抽象 :父类用来约束子类必须有那些类,只进行约束,不关心子类怎么实现

abstract定义抽象类

abstract定义抽象方法,只用声明,不用实现(实现了也无实际输出结果的影响)

包含抽象方法的类一定是抽象类

抽象类中可以有普通的方法,也可以不包换抽象方法

package project4;public abstract class Telephone {public abstract void message();
}
package project4;public class Smartphone extends Telephone {@Overridepublic void message() {// TODO Auto-generated method stubSystem.out.println("Smartphone message");}}
package project4;public class phone extends Telephone {public  void message() {System.out.println("Telephone message");}}
package project4;public class Initial {public static void main(String[] args) {// TODO Auto-generated method stubphone p1 = new phone();Smartphone p2 = new Smartphone();p1.message();p2.message();}}

9.接口

当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类,他们的抽象类是人。说明,他们都是人。人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。

[修饰符]   class   类名 extends 父类   implentments 接口1 接口2

当一个类继承了抽象类,则需要实现继承的抽象方法,如果是接口,则实现接口中的方法

package project7;public abstract class Telephone {public abstract void message();   //抽象类
}
package project7;public interface Iplaygame {   //接口public void play();
}
package project7;public class Psp implements Iplaygame {//只实现了接口@Overridepublic void play() {// TODO Auto-generated method stubSystem.out.println("PSP play");}}
package project7;public class Smartphone extends Telephone implements Iplaygame {
//实现了接口和都继承了抽象类@Overridepublic void play() {// TODO Auto-generated method stubSystem.out.println("Smart play");}@Overridepublic void message() {// TODO Auto-generated method stubSystem.out.println("Smart message");}}
package project7;public class Initial {public static void main(String[] args) {// TODO Auto-generated method stubIplaygame ip1 = new Psp();ip1.play();Iplaygame ip2 = new Smartphone();ip2.play();//ip2.message(); 错误 因为数据类型为Iplaygame所以没有message方法Smartphone ip3 = new Smartphone();ip3.play();ip3.message();//正确的}}

Java 学习之过错(二)相关推荐

  1. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

  2. java学习笔记(二十八)——开发一个小项目(VMeeting3.0)

    上篇文章按照较规范的产品需求文档梳理了项目的逻辑,感觉开发起来明晰了很多:挂上一篇文章java学习笔记(二十七)--开发一个小项目(VMeeting2.0)_Biangbangbing的博客-CSDN ...

  3. Java入门123:一个老鸟的Java学习心得(二维码版)

    Java入门123:一个老鸟的Java学习心得(二维码版)清华大学出版社 Java入门123--一个老鸟的Java学习心得(二维码版)充分考虑了初学Java的种种困难,讲解细致入微,抽丝剥茧,层层推进 ...

  4. java学习-zxing生成二维码矩阵的简单例子

    这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件,也可使用maven添加依赖 <dependency><gro ...

  5. Java学习笔记(二一)——Java 泛型

    [前面的话] 最近脸好干,掉皮,需要买点化妆品了. Java泛型好好学习一下. [定义] 一.泛型的定义主要有以下两种: 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个 ...

  6. java学习之数组(二)

    学编程吧java数组学习(二)发布了,欢迎大家通过xuebiancheng8.com来访问. 下面接着来分析数组,前面分析了什么是数组,为什么要用数组,下面来分析下如何使用数组 数组和其他数据类型一样 ...

  7. Java学习笔记(二)

    1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Runtime Enviro ...

  8. Java学习笔记(二)JavaSE

    Markdown学习(方便写笔记记录,推荐文本编辑器Typora),文件后缀xxx.md 标题:# 一级标题,## 二级标题,最多六级标题 字体:**粗体**,*斜体*,***斜体加粗***,~~删除 ...

  9. Java 学习笔记(二十一)

    正则表达式 正则表达式 底层实现分析 正则表达式语法 转义符 字符匹配符 选择匹配符 限定符 定位符 分组 非捕获分组 非贪心匹配 应用实例 汉字验证 邮编验证(不完全) QQ 号验证 手机号验证 U ...

最新文章

  1. Comet, 下一代反向AJAX(即服务器推送技术- Server-side push)
  2. 96. Unique Binary Search Trees 不同的二叉搜索树
  3. jQuery Todolist
  4. listen函数的第二个参数_JavaScript数组构造from函数
  5. luoguP5035金坷垃
  6. python 读行为数组_python将多列文件读入数组
  7. 牛客挑战赛48C-铬合金之声【Prufer序列】
  8. python打开火狐浏览器打不开网页_PHP让指定网页只能在微信内置浏览器打开 附代码...
  9. 一个XML转换的例子
  10. 2020年12月最新OneDrive网盘免费领取5TB教程
  11. 论MySQL的监控和调优
  12. [julia]本地离线安装package
  13. discuz 任务扩展
  14. Matlab语言标点说明
  15. flink集成springboot案例_集成-Apache Flink+Spring Boot
  16. ICPC 2015 北京 Today Is a Rainy Day
  17. 程序员真的是最容易改变命运的一个职业
  18. 改造汇文OPAC,使其通过萌校的通用扫码接口登录
  19. URL ASCII编码解码
  20. 图片视频毛玻璃效果实现

热门文章

  1. 曾披露“开房信息”的乌云网 如今摊上大事儿了
  2. matlab mcc m,急!!!在线等 matlab 关于mcc
  3. c语言指针大括号的用法,c语言大括号的用法
  4. 2020.9.30--ps--渐变映射、阈值、Lab模式
  5. 20道C++经典面试题
  6. MobPush的消息推送原理是什么?
  7. 你的电脑硬件设置已更改,请重新启动计算机,使这些更改生效
  8. 腾讯云轻量应用服务器搭配WordPress程序使用宝塔面板一键式搭建个人博客网站
  9. puer实现前后端分离开发
  10. 蓝牙信号,断点续传,Xutils