java中的包 - package

包:包中有很多的类,根据类的功能不同,我们可以创建不同的包。

包的主要功能:

包的主要功能:用于分类管理

包的基本语法

package 包的路径(完整路径,从第一个包开始写路径)
路径与路径之间使用点隔开: package.fatherlujing.sonlujing

在一个文件中,可以没有包,或者一个包。但是不能出现两个包。

包名一般小写,是为了区分类名,类名一般大写

java中存在不同包相同类的名称,我们可以使用包名进行区分

一般情况下,在使用类的情况下,我们都使用类的全类名(包名+类)

全类名

在使用类的时候必须使用类的全类名。否者就容易造成歧义。
有的小伙伴可能会说:
String name='zhangsan'
这里我怎么没有使用全类名呢?
java.lang.String name='zhangsann' [全类名]
其实这是因为java虚拟机帮我们做了一层处理。自动帮我们添加。所以我们不需要写
记住【只要是java.lang下的类都不需要我们写,虚拟机会帮我们搞定】 new fatherlujing.类名()
new 类名()
上面这两者在同一个目录下是等价的 如何我们想要new一个日期。按照我们刚刚的说法是下面这样写的
java.util.Date d = new java.util.Date();
但是这样写太麻烦了。
此时我们的important就出现了
import java.util.Date; // 导入这个包
Date d = new Date();
这样就不会出问题了。 有些时候可能我们需要导入很多包。如下:
import java.util.a;
import java.util.b;
import java.util.c;
....可能还有很多....
这个时候我们可以使用通配符 * 来解决导出的包太多的问题
import java.util.*;
会自动导入 java.util下的包 【注意】 imporant 不能放在包的前面。
如何使用了不同包相同名称的类,还是需要通过imporant 引入

构造方法:专门用于构建对象

如果一个类中没有任何的构造方法,那么JVM会自动添加一个公共的,无参的构造方法,方便对象调用。

public class study01 {
public static void main(String[] args) {
// 构造方法,专门用于构建对象
// 如果一个类中没有任何的构造方法,那么JVM会自动添加一个公共的,无参的构造方法,方便对象调用。
User user1 = new User();
}
} class User {
void test(){
System.out.println("测试方法");
}
}
上面这个类中没有任何的构造方法。
那么JVM会自动添加一个公共的,无参的构造方法,方便对象调用。

构造方法

1.构造方法的基本语法: 类名(){}
2.构造方法也是方法,只是没有void关键字
3.构造方法名和类名完全相同。
4.如果类中没有构造方法,那么JVM虚拟机会提供默认的构造方法
5.如果类中有构造方法,那么JVM虚拟机不会提供默认的构造方法
6.构造方法也是方法,所以也可以传递参数,但是一般传递参数的目的是用于对象属性赋值。
7.在new的时候构造方法会被执行
8.代码块是在构造方法(创建对象)执行前执行

构造方法会在new的时候被执行

public class study01 {
public static void main(String[] args) {
// 构造方法,专门用于构建对象
User user1 = new User();
}
}
class User {
// 构造方法在new的时候被执行
User() {
System.out.println("我是构造方法");
}
void test(){
System.out.println("测试方法");
}
} 控制台会输出:我是构造方法

构造方法传参一般用于对象属性赋值

public class study01 {
public static void main(String[] args) {
// 构造方法,专门用于构建对象
User user1 = new User("张三", 10);
System.out.println("useName的属性值"+ user1.useName);
}
}
class User {
// 属性
String useName;
int useAge;
// 构造方法在new的时候被执行
User(String name, int age) {
// 对象属性赋值
useName = name;
useAge = age;
System.out.println("我是构造方法"+ "我叫:"+ useName + ";今年:"+useAge);
}
}
在控制台会输出:
我是构造方法我叫:张三;今年:10
useName的属性值张三

代码块是在构造方法执行前执行

public class study01 {
public static void main(String[] args) {
// 构造方法,专门用于构建对象
// 如果一个类中没有任何的构造方法,那么JVM会自动添加一个公共的,无参的构造方法,方便对象调用。
User user1 = new User("张三", 10);
}
} class User {
//下面是对象的属性
String useName;
int useAge;
// 构造方法在new的时候被执行
User(String name, int age) {
//对象属性赋值
useName = name;
useAge = age;
System.out.println("我是构造方法"+ "我叫:"+ useName + ";今年:"+useAge);
}
{
System.out.println("我是代码块,我在创建对象之前执行");
}
}
在控制台依次输出:
我是代码块,我在创建对象之前执行
我是构造方法我叫:张三;今年:10

继承

1.类存在父子关系:子类可以直接获取到父类的成员属性和成员方法。
2.类的继承只能是单继承。一个类只能有一个父类,不能存在多个父类;
就是说你能既继承了A类,又继承了B类。
3.一个父类可以有多个子类
4.继承的基本语法: 子类 extends 父类

继承的简单应用,子类什么都没有写,直接调用父类中的方法

public class study01 {
public static void main(String[] args) {
Son son1 = new Son();
// 调用父类中的方法。
son1.say(); }
}
//父类
class Father{
String name;
void say(){
System.out.println("我是说话了");
} }
//子类继承父类
class Son extends Father{ }
控制台直接输出:我是说话了

如果父类和子类含有相同的属性,那么可以采用特殊的关键字进行区分 usper this

usper this 这两个关键字在静态方法和静态代码块中是不能使用的

父类和子类含有相同的属性

public class study01 {
public static void main(String[] args) {
Son son1 = new Son();
// 调用父类中的方法。
son1.test(); }
} //父类
class Father{
// 这里有一个name属性
String name="张三";
void say(){
System.out.println("我是说话了");
}
}
//子类继承父类
class Son extends Father{
// 这里也有一个name属性
String name="李四";
void test(){
System.out.println("我是说话了"+name);
System.out.println("我是说话了"+name);
}
} 控制台输出的是:
我是说话了李四
我是说话了李四
ps:现在我们想区分子类中的name和父类中的name.

如何区分父类和子类中相同的属性

public class study01 {
public static void main(String[] args) {
Son son1 = new Son();
// 调用父类中的方法。
son1.test();
}
}
//父类
class Father{
// 这里有一个name属性
String name="张三";
void say(){
System.out.println("我是说话了");
}
}
//子类继承父类
class Son extends Father{
// 这里也有一个name属性
String name="李四";
void test(){
System.out.println("我是说话了"+this.name);
System.out.println("我是说话了"+super.name);
}
}
控制台输出的是:
我是说话了李四
我是说话了张三

构建了多少个父类对象

1.父类对象是在子类对象创建前创建完成,创建子类对象前,会调用父类的构造方法完成父类的创建。

2.默认情况下,子类对象构建时,会默认调用父类的构造方法完成父类对象的构建,使用的是super的方式进行,只不过JVM自动完成的。

3.如果父类提供了构造方法,那么JVM不会提供默认的构造方法,此时子类应该显示调用super方法构建父类对象

构建了多少个父类对象


public class study01 {
public static void main(String[] args) {
// 请问构建了多少个父类对象
Son son1 = new Son();
Son son2 = new Son();
Son son3 = new Son();
}
}
//父类
class Father{
void say(){
System.out.println("我是说话了");
}
}
//子类继承父类
class Son extends Father{ }
有的小伙伴可能会说:1个,有的小伙伴可能会说3个。
1个原因:虽然构建了3个子类对象,但是继承的是同一个父类对象。所以是1个。
3个原因:我构造了3个子类对象,所以有3个父类对象。

通过构造方法查看构造了多少个父类对象

public class study01 {
public static void main(String[] args) {
Son son1 = new Son();
Son son2 = new Son();
Son son3 = new Son();
}
} //父类
class Father{
Father(){
System.out.println("构造方法");
}
}
//子类继承父类
class Son extends Father{ }
在控制台输出了3次。
说明确实是构造了 3个父类对象

父类提供了构造方法,此时子类应该显示调用super方法构建父类对象

public class study01 {
public static void main(String[] args) {
Son son1 = new Son();
}
} //父类
class Father{
String userName;
// 父类提供了构造方法
Father(String name){
userName = name;
System.out.println("构造方法" + userName);
}
}
//子类继承父类
class Son extends Father {
Son(){
// 如果父类提供了构造方法,那么JVM不会提供默认的构造方法,此时子类应该显示调用super方法构建父类对象
super("张三");
}
}

new只会构建一个对象

new只会构建一个对象。在内存在开辟了1个空间来存储创建出来的对象。
也就是:你不能说写了2个new,构建了2个对象。
Son son1 = new Son();
Son son2 = new Son();
你这不对呀? 跟刚刚说的不一样的。

多态

所谓的多态:其实就是一个对象在不同的场景下表现出来的不同状态和形态。
多态语法其实就是对对象的使用场景进行约束
一个对象可以使用的功能取决于引用变量的类型
public class study01 {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Body();
Person p3 = new Girl();
}
} class Person{
}
class Body extends Person {
}
class Girl extends Person {
}

多态的一个表现

public class study01 {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Body();
// p2.testBody(); // 会报错
p2.testPerson(); // 正常的
Person p3 = new Girl();
}
} class Person{
void testPerson(){
System.out.println("testPerson");
}
} class Body extends Person {
void testBody(){
System.out.println("testBody");
}
}
class Girl extends Person {
void testGirl(){
System.out.println("testGirl");
}
}

多态的一个表现

子类类型赋值给父类  Father f1 = New Son(),
调用子类方法报错。 调用父类方法OK。这个就是多态

java基础语法-package构造方法-继承-多态的更多相关文章

  1. Java基础语法07-面向对象-多态

    抽象类 抽象方法 : 没有方法体的方法. 抽象类:被abstract所修饰的类. 抽象类的语法格式: [权限修饰符] abstract class 类名{ }[权限修饰符] abstract clas ...

  2. Java基础学习笔记八 Java基础语法之接口和多态

    接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...

  3. Java基础语法Day_08(继承、抽象)

    第1节 继承 day09_01_继承的概述 day09_02_继承的格式 day09_03_继承中成员变量的访问特点 day09_04_区分子类方法中重名的三种变量 day09_05_继承中成员方法的 ...

  4. Java基础之理解封装,继承,多态三大特性

    目录 封装 继承 多态 封装 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 代码理解 publ ...

  5. java基础语法(一)

    java基础语法(一) 1.类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念.先有类,然后由类来生成 对象(Object).对象又叫做实例(Instance). 2.类由两大部分构成:属性 ...

  6. JAVA基础语法——标识符、修饰符、关键字(个人整理总结)

    JAVA基础语法——标识符.修饰符.关键字 一 . 标识符 1.1    什么是标识符 就是程序员在定义java程序时,自定义的一些名字,例如helloworld 程序里关键字class 后跟的Dem ...

  7. Java基础语法知识你真的都会吗?

    第一阶段 JAVA基础知识 第二章 Java基础语法知识 在我们开始讲解程序之前,命名规范是我们不得不提的一个话题,虽说命名本应该是自由的,但是仍然有一定的"潜规则",通过你对命名 ...

  8. JavaSE基础(三)--Java基础语法

    Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...

  9. Java匹马行天下之JavaSE核心技术——Java基础语法

    Java基础语法 一.   认识Java 1. Java 简介 java 是一种高级的面向对象的程序设计语言,使用Java语言编写的程序时跨平台的.从pc到手机,都有Java开发的程序和游戏,Java ...

  10. Java-Runoob:Java 基础语法

    ylbtech-Java-Runoob:Java 基础语法 1.返回顶部 1. Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍 ...

随机推荐

  1. P6419 COCI2014-2015#1 Kamp

    P6419 COCI2014-2015#1 Kamp 换根 \(dp\) 的 trick. 题面 钦定 \(k\) 个关键点,求每个点出发,访问完所有关键点的距离最小值. 思路 设 \(g_u\) 为 ...

  2. 什么是静态方法?@staticmethod装饰器怎么用?

    填坑(@staticmethod装饰器----静态方法声明) > 在学习的时候看到很多人都在用@Staticmethod这个装饰器来修饰类方法,这就让我好奇了这个独特的装饰器到底是个啥?咋就受到 ...

  3. cornerstone中raft_server_req_handlers源码解析

    1.概述 之前说过raft_server是cornerstone的核心,其中充满了很多req的发送,那么follower收到leader的req会怎么处理呢? 本文就是来解析cornerstone中处 ...

  4. python之APScheduler

    介绍 APScheduler是Python中一个强大的第三方库,用于在后台执行定时任务.它允许我们根据设定的时间间隔.日期规则或特定时间来执行任务,适用于定时执行脚本.定时发送邮件.定时处理数据等场景 ...

  5. Ubuntu实现SSH外网连接内网(反向隧道)

    应用场景: 如果你有Linux云主机(腾讯.华为等),且公司有一台只有内网IP (或动态IP) 的Linux工作机:你计划在家里工作时,通过家里的电脑连接公司的工作机 (且不想使用类似Teamview ...

  6. PythonDay8Advance

    PythonDay8Advance 正则表达式 本身也是一个字符串,其中的字符具有特殊含义,将来我们可以根据这个字符串[正则表达式]去处理其他的字符串,比如可以对其他字符串进行匹配,切分,查找,替换等 ...

  7. Qt 指定 so库 运行时路径

    在Qt的pro文件最后添加运行时so库路径: QMAKE_RPATHDIR += /home/pi/qt5 注意,必须是绝对路径,相对路径无效(因为在pro文件中,相对路径是相对于项目路径)

  8. 硬盘空间消失之谜:Linux 服务器存储排查与优化全过程

    前言 最近线上服务经常出现一些奇奇怪怪的问题,比如网页上的静态资源加载不出来,或者请求后端莫名报错,又或者 Redis 报错- 当我 SSH 登录到服务器上时,更不对劲了,敲个命令都卡顿- 如果是以前 ...

  9. 2.mysql授权认证

    权限系统介绍 ● 什么是权限系统 权限系统是授予来自某个主机的某个用户可以查询.插入.修改.删除等数据库操作的权限 不能明确的指定拒接某个用户的连接 权限控制(授权与收回)的执行语句包括 create ...

  10. C# 7.0 新特性:模式匹配 ( pattern matching)

    C# 7.0 新特性:模式匹配 ( pattern matching ) 在 C# 中,is 是一个关键字,可以用来检查某个数据的类型是否为特定类型.这是一个表达式,返回类型为 boolean. 例如 ...