Java 学习 第三篇;面向对象
1:Java的常用包;
核心类在java 包中;扩展类在javax包中
java.lang 系统默认自动导入 包含String Math System Thread等类
java.util 包含了工具类接口和集合框架类 如Arrays List Set
java.net java.io java .text java.sql
java.awt 抽象窗口工具集 Abstract Window Toolkits
java.swing 包含Swing图形用户界面编程的相关类和接口用于构建和平台无关的GUI程序;
2:构造器
构造器是一个特殊的方法用于创建类的实例;构造器的最大用处就是创建对象的时候进行初始化基本类型的初始化属性为0 boolean为false 引用类型属性设置为null;
另外,构造器也可以重载;
public class Fruit
{
public String name;
public String color;
public double weight;
//constructor A
public Apple()
{
}
//constructor B
public Apple(String name , String color)
{
this.name = name;
this.color = color;
}
//constructor C
public Apple(String name , String color , double weight)
{
//通过this调用另一个重载的构造器的初始化代码
this(name , color);
//下面this引用该构造器正在初始化的Java对象
this.weight = weight;
}
}
3:类的继承
一个关于sb的例子
public class sb {
/**
* @param args
*/
public String name;
public int age;
public void say(String content)
{
System.out.println(content);
}
}
public class Sb_of_man extends sb {
public String quxiang;
public Sb_of_man(String quxiang)
{
this.quxiang=quxiang;
}
public static void main(String[] args)
{
Sb_of_man one =new Sb_of_man("W");
one.say("I like "+one.quxiang);
}
}
output:
I like W
子类会继承父类的所有属性和方法;Java中每个类最多只有一个直接父类,注意是直接父类;
4:子类重写父类的方法;因为父类的某些方法可能不适用一些具体而特殊的子类这时候就要对其重写;比如鸵鸟不会飞但是它继承的鸟这个父类中默认鸟都是会飞的;
重写父类要遵循的原则:
方法名相同,参数表相同
返回值类型比父类返回值类型更小或者相等
子类方法的访问权限比父类方法更大或者相等
重写的方法如果是类方法那就一定是类方法不要乱用实例方法覆盖类方法这样是错误的。
如下示例不符合原则
class BaseClass
{
public static void test(){....}
___________
}
class SubClass
{
public void test(){.....}
___________
}
另外 如果父类中方法被覆盖之后子类则无法访问,如果访问需要使用super关键字
如果父类中方法被关键字private修饰则该方法对子类隐藏,子类无法使用,无法重写,无法访问,这样的话就无所谓重写喽;
5:super super和this一样,都不能出现在static的方法中,Cannot use super in a static context
super是直接父类对象的默认引用,注意哦 是父类对象不是父类,很有区别;
Java程序创建一个类的对象的时,系统会隐式的创建一个该父类的对象,只要有一个子类对象存在则一定存在一个与之对应的父类对象
6:调用父类构造器
构造器不能继承;如果父类中自定义了构造器,那么子类中如果使用必须显式调用父类构造器,否则编译出错,如果没有自定义构造器那么默认即可;(这点要注意!)
可参考 http://www.knowsky.com/369673.html 所言:假如自定义了构造器,那么默认构造器将不存在! 似乎这样解释来算是对的吧
http://www.blogjava.net/weidagang2046/articles/3430.html
当调用子类构造器来初始化子类对象时,父类构造器总是会在子类构造器之前执行;以此创建人和java对象总是最先执行java.lang.Object类的构造器;
示例如下:
class Creature
{
public Creature()
{
System.out.println("Creature无参数的构造器");
}
}
class Animal extends Creature
{
public Animal(String name)
{
System.out.println("Animal带一个参数的构造器,该动物的name为" + name);
}
public Animal(String name , int age)
{
//使用this调用同一个重载的构造器
this(name);
System.out.println("Animal带2个参数的构造器,其age为" + age);
}
}
public class Wolf extends Animal
{
public Wolf()
{
//显式调用父类有2个参数的构造器
super("土狼", 3);
System.out.println("Wolf无参数的构造器");
}
public static void main(String[] args)
{
new Wolf();
}
}
output:
Creature无参数的构造器
Animal带一个参数的构造器,该动物的name为土狼
Animal带2个参数的构造器,其age为3
Wolf无参数的构造器
7:多态 Polymorphism
java引用变量有两个类型一个是编译时类型一个是运行是类型;编译时类型由声明时候的类型决定,运行时候类型有实际赋值给该变量的对象决定;如果编译时类型和运行时不同则出现多态;
另外系统总是试图访问它编译时类所定义的属性而不是运行时类所定义的属性。
8:引用类型的强制类型转换;
最好用instanceof来进行判断是否能进行强制类型转换,
把子类对象赋给父类引用变量被称为向上转化;总可以成功;
反过来需要强制类型转换,最好用instanceof运算符进行判断;Instance (例子、实例)
示例:
Object hello="hello";
if(hello instanceof String)
String str=(String) hello;
Java 学习 第三篇;面向对象的更多相关文章
- 从.Net到Java学习第三篇——spring boot+mybatis+mysql
从.Net到Java学习第一篇——开篇 环境:mysql5.7 新建mysql数据库demo,然后执行如下sql脚本进行数据表创建和数据初始化: -- ------------------------ ...
- Java学习第三篇:类的三大特征,抽象类,接口,final关键字
一.类的三大特征 1.封装性 (1).什么是封装 封装就是把抽象出的数据和对数据的操作封装在一起, 数据被保护在内部, 程序的其他部分只有通过被授权的操作(成员方法), 才能对数据进行操作. (2). ...
- java 学习第三篇if判断
JAVA 判断 单词: if 如果 else 否则 单分支: If(条件) { 代码块 } If是一个判断语句.代码格式如上. If括号的内是表达式.如果表达式值是成立的便执行代码块.之后在执行IF语 ...
- JAVA学习第三篇Boolean
Boolean是布尔值. 布尔值只有两个值:真和假.写作:true false. 那么如何使用呢? 最简单的用法: public class demo{ public static void main ...
- 从.Net到Java学习第十一篇——SpringBoot登录实现
从.Net到Java学习系列目录 通过前面10篇文章的学习,相信我们对SpringBoot已经有了一些了解,那么如何来验证我们的学习成果呢?当然是通过做项目来证明啦!所以从这一篇开始我将会对之前自己做 ...
- Java学习之反射篇
Java学习之反射篇 0x00 前言 今天简单来记录一下,反射与注解的一些东西,反射这个机制对于后面的java反序列化漏洞研究和代码审计也是比较重要. 0x01 反射机制概述 Java反射是Java非 ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第三周
java学习第三周 不知不觉,学习java已经是第三周了,不同于初见时的无措,慌张,在接触一段时日后,渐渐熟悉了一些,了解到了它的便利之处,也体会到了它的一些难点,本周主攻第四章,< ...
- Python学习-第三天-面向对象编程基础
Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...
- Java学习之jackson篇
Java学习之jackson篇 0x00 前言 本篇内容比较简单,简单记录. 0x01 Json 概述 概述:JSON(JavaScript Object Notation, JS 对象简谱) 是一种 ...
随机推荐
- LeetCode_Spiral Matrix
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...
- 采购术语PR、PO、RFQ、RFI、SOW、BOM、JIT、VMI、MRO 是什么意思
PO:Purchase Order Form 采购订单,公司对外使用,还有个PR: ,公司内部使用的采购申请单 PR (Purchase Requirent) 请购单,采购申请单,代表企业内部的申请需 ...
- js收集错误信息,错误上报
线上的代码可有有时候用户会反应不好使,一般是因为js造成的! 尤其在移动端各个手机之前的差异特别大. 下面这段代码是获取能帮助你! <script> window.onerror = fu ...
- 【转】ubuntu下安装及设置FTP服务器!!
原文网址:http://hujizhou.blog.51cto.com/514907/1290915 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律 ...
- SNMP配置和常用命令OID(转)
博文转至:http://blog.csdn.net/susu09new/article/details/12835191 OID值表示的意义(中文) .1.3.6.1.2.1.1操作系统相关的信息,其 ...
- 【BBST 之伸展树 (Splay Tree)】
最近“hiho一下”出了平衡树专题,这周的Splay一直出现RE,应该删除操作指针没处理好,还没找出原因. 不过其他操作运行正常,尝试用它写了一道之前用set做的平衡树的题http://codefor ...
- Android应用开发学习之状态栏通知
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 状态栏通知涉及到两个类,一是Notification,它代表一个通知:另一个是NotificationManager ...
- PHP批量审核后台
/*批量审核方法*/ function setOn_all() { if($_POST) { $p=M('news'); $data=array(); $i=0; foreach ($_POST as ...
- 《JavaScript 闯关记》之 DOM(上)
DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API.DOM 描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分. 节点层次 DOM 可以将任何 HTML 或 XM ...
- 爆出错误:The Geometry has no Z values
ArcGis添加地图标注,爆出错误:The Geometry has no Z values 解决方法如下: public bool AddFeature( ESRI.ArcGIS.Geometry. ...