Java 学习之过错(二)
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 学习之过错(二)相关推荐
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- java学习笔记(二十八)——开发一个小项目(VMeeting3.0)
上篇文章按照较规范的产品需求文档梳理了项目的逻辑,感觉开发起来明晰了很多:挂上一篇文章java学习笔记(二十七)--开发一个小项目(VMeeting2.0)_Biangbangbing的博客-CSDN ...
- Java入门123:一个老鸟的Java学习心得(二维码版)
Java入门123:一个老鸟的Java学习心得(二维码版)清华大学出版社 Java入门123--一个老鸟的Java学习心得(二维码版)充分考虑了初学Java的种种困难,讲解细致入微,抽丝剥茧,层层推进 ...
- java学习-zxing生成二维码矩阵的简单例子
这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件,也可使用maven添加依赖 <dependency><gro ...
- Java学习笔记(二一)——Java 泛型
[前面的话] 最近脸好干,掉皮,需要买点化妆品了. Java泛型好好学习一下. [定义] 一.泛型的定义主要有以下两种: 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个 ...
- java学习之数组(二)
学编程吧java数组学习(二)发布了,欢迎大家通过xuebiancheng8.com来访问. 下面接着来分析数组,前面分析了什么是数组,为什么要用数组,下面来分析下如何使用数组 数组和其他数据类型一样 ...
- Java学习笔记(二)
1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Runtime Enviro ...
- Java学习笔记(二)JavaSE
Markdown学习(方便写笔记记录,推荐文本编辑器Typora),文件后缀xxx.md 标题:# 一级标题,## 二级标题,最多六级标题 字体:**粗体**,*斜体*,***斜体加粗***,~~删除 ...
- Java 学习笔记(二十一)
正则表达式 正则表达式 底层实现分析 正则表达式语法 转义符 字符匹配符 选择匹配符 限定符 定位符 分组 非捕获分组 非贪心匹配 应用实例 汉字验证 邮编验证(不完全) QQ 号验证 手机号验证 U ...
最新文章
- Comet, 下一代反向AJAX(即服务器推送技术- Server-side push)
- 96. Unique Binary Search Trees 不同的二叉搜索树
- jQuery Todolist
- listen函数的第二个参数_JavaScript数组构造from函数
- luoguP5035金坷垃
- python 读行为数组_python将多列文件读入数组
- 牛客挑战赛48C-铬合金之声【Prufer序列】
- python打开火狐浏览器打不开网页_PHP让指定网页只能在微信内置浏览器打开 附代码...
- 一个XML转换的例子
- 2020年12月最新OneDrive网盘免费领取5TB教程
- 论MySQL的监控和调优
- [julia]本地离线安装package
- discuz 任务扩展
- Matlab语言标点说明
- flink集成springboot案例_集成-Apache Flink+Spring Boot
- ICPC 2015 北京 Today Is a Rainy Day
- 程序员真的是最容易改变命运的一个职业
- 改造汇文OPAC,使其通过萌校的通用扫码接口登录
- URL ASCII编码解码
- 图片视频毛玻璃效果实现
热门文章
- 曾披露“开房信息”的乌云网 如今摊上大事儿了
- matlab mcc m,急!!!在线等 matlab 关于mcc
- c语言指针大括号的用法,c语言大括号的用法
- 2020.9.30--ps--渐变映射、阈值、Lab模式
- 20道C++经典面试题
- MobPush的消息推送原理是什么?
- 你的电脑硬件设置已更改,请重新启动计算机,使这些更改生效
- 腾讯云轻量应用服务器搭配WordPress程序使用宝塔面板一键式搭建个人博客网站
- puer实现前后端分离开发
- 蓝牙信号,断点续传,Xutils