栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

面向对象:封装与继承

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面向对象:封装与继承

封装与继承 封装

概念:隐藏类的内部实现细节,对外提供可访问的方法

把尽可能多的东西藏起来,对外提供便捷的接口

只提供给用户用到的接口,封装得越多越安全

举例:电脑中有很多插口,只提供给用户有用的

把所有的属性藏起来

属性是无法屏蔽错误的,用户输入什么就接受什么,不安全

封装的好处:

便于使用者正确使用系统,防止错误修改属性

有助于系统之间的松耦合,提高系统独立性

提高软件的可重用性

降低了构建大型系统的风险

包

创建包package:

允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件

防止命名冲突,区分名字相同的类

有助于实施访问权限的控制

如何创建包:

package cn.jbit.inherit;  //声明包
public class School{
    ……
}
  • 包名由小写字母组成,不能以圆点开头或结尾

    package test;  //声明包
  • 包名之前最好加上唯一的前缀,通常使用组织倒置的网路域名

    package net.javagroup.mypackage;
  • 包名后续部分依不同机构内部的

    package net.javagroup.research.powerproject;
                                    部门名.项目名

com:商业机构、edu:教育机构、gov:政府机关、net:网络机构、org:非盈利机构

使用组织倒置的网络域名:www.bdqn.cn 这个域网是唯一的,

一般公司命名为:com.公司名。项目名.模块名

导入包import:

import 包名.类名
​
import java.util.*;      //导入java.util包中所有类,*包中所有类
​
//导入指定包中指定类,指包中School类
import cn.jtest.classandobject.School;    
不同包下使用对象:

com.test01.User u1 = new com.test01.User();
com.test01.User u2 = new com.test02.User();

注意:

1、一个类同时引用了两个来自不同包的同名类

必须通过完整类名来区分

2、 每个包都是独立的,顶层包不会包含子包的类

3、 package和import的顺序是固定的

package必须位于第一行(忽略注释行)

只允许有一个package语句

其次是import

接着是类的


访问权限控制

类的访问修饰public:

  • public修饰符:公有访问级别

  • 默认修饰符:包级私有访问级别

修饰符作用域同一个类中同一个包中子类中任何地方
private可以不可以不可以不可以
默认修饰符可以可以不可以不可以
protected可以可以可以不可以
public可以可以可以可以

static修饰符:

可以用来修饰:

成员变量:静态变量,可以直接通过类名访问

成员方法:静态方法,可以直接通过类名访问

代码块:静态代码块,当Java虚拟机加载类时,就会执行该代码块

static代码块:

JVM加载类时,加载静态代码块:如果有多个静态块,按顺序加载;每个静态代码块只会被执行一次

package test; 
​
class StaticTest{
    static int num = 100;
    static{
        num+=100;
        System.out.println(num);  //200
        System.out.println("静态代码块1");
    }
    static{
        num+=100;
        System.out.println(num);  //300
        System.out.println("静态代码块2");
    }   
}
public class Test04 {
    public static void main(String[] args) {
        StaticTest st1 = new StaticTest();
        StaticTest st2 = new StaticTest();
        System.out.println(StaticTest.num); //300
        
    }
}
//输出:
200
静态代码块1
300
静态代码块2
300

static变量:

static变量的作用:

(1)能被类的所有实例共享,可作为实例之间进行交流的共享数据

(2)如果类的所有实例都包含一个相同的常量属性,可把这个属性定义为静态常量类型,从而节省内存空间 (定义一个静态常量,用类.name 去调用,避免每次new User())

static方法:

1.静态方法:可直接通过类名访问

静态方法中不能使用this和super

不能直接访问所属类的实例变量和实例方法

可直接访问类的静态变量和静态方法

2.实例方法:通过实例访问

可直接访问所属类的静态变量、静态方法、实例变量和实例方法

3.静态方法必须被实现

main是最常用的静态方法,静态方法里面只能调用静态方法


package test;
​
public class User {
    //public static String name = "张安";  //静态变量
    public static final String NAME = "张安";  //静态常量,名字大写
   
    //静态方法:
    public static void show(){}
    
    //构造方法:
     public User(){
         System.out.println("构造方法");
     }
    static{
        System.out.println("加载static代码块");
    }
    static{
        System.out.println("加载static代码块");
    }   
​
​
//测试类中:
 System.out.print(User.NAME);  //张安
User.show();  //调用静态方法语法(Arrays.toString等也是静态方法)
​
new User();   //先读取静态,才调构造。并且只会加载一次
new User();   
    //输出:加载代码块*2  构造方法   构造方法

继承

使用继承:

Java中只支持单根继承,即一个类只能有一个直接父类

将子类共有的属性和行为放到父类中

编写父类(基类,超类)

[访问修饰符] class Pet{
	//公共的属性和方法
}

编写子类(派生类),继承父类

[访问修饰符] class Dog extends Pet { 
    //子类特有的属性和方法
}

super关键字:

子类访问父类成员:

  • 使用super关键字,super代表父类对象;super只能出现在子类的方法和构造方法中。

  • 在子类构造方法中调用且必须是第一句。

  • 不可以访问父类中定义为private的属性和方法

访问父类构造方法:super();
                 super(name);
访问父类属性:super.name;
访问父类方法:super.print();

继承条件下构造方法的调用规则如下:

Ø 如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,写不写“super();”语句,效果是一样的。

Ø 如果子类的构造方法中通过super显式调用父类的有参构造方法,那将执行父类相应构造方法,而不执行父类无参构造方法。

Ø 如果子类的构造方法中通过this显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。

Ø 特别注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类Object类的无参构造方法为止。

public class Fu {
	public int age = 40;
}
public class Zi extends Fu{
    public int age  = 30;
    
    public void show(){
        int age = 20;
        System.out.println(age);  //20
        //访问本类的成员变量
        System.out.println(this.age);  //30
        //访问父类的成员变量
        System.out.println(super.age); //40
    }
}
publiv class Demo{
	Zi zz = new Zi();
    zz.show();
}

理解继承:

子类调用父类的什么?

  • 继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里

  • 继承默认权限修饰符的属性和方法,但子类和父类必须在同一个包里

  • 不能继承父类private成员

  • 构造方法

 

java中继承的注意事项:

  • java中类只能继承一个父类,不能多继承

  • java中类支持多层继承

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026921.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号