类的相关知识(封装继承多态方法构造方法接口抽象类静态方法静态变量等)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的相关知识(封装继承多态方法构造方法接口抽象类静态方法静态变量等)相关的知识,希望对你有一定的参考价值。
类
通过抽象,得到的某一个事物的共同特征。
1、类是抽象的,概念的,代表一类事物,比如人类,猫类……
2、对象是具体的,实际的,代表一个具体事物
3、类是对象的模板,对象是类的一个个体,实例
class Cat // Java中类名的首字母大写
{
//下面的就是类的成员变量、属性
Int age;
String name;
String color;
}
类的结构:
Package 包名;
Class 类名 extends 父类 implements 接口名
{
成员变量(属性)(一般都是简单类型、引用类型);
构造方法;
成员方法;
}
public class Pe
{
public static void main (String args[])
{
Person a = new Person(); // 对象a实例化后,即在内存中划分一块内存空间
a.age=10; // 无论该对象的成员变量是否已经赋值,都会划分内存空间
Person b;
b=a; //b也指向a指向的内存空间
System.out.println(b.age); //输出10
--------------------------------------------------------------------------------------------------------------------
Person c;
C=b;
c.age=9;
System.out.println(a.age); //都是输出9
System.out.println(b.age);
System.out.println(c.age);
}
}
class Person
{
int age;
String name;
}
———————————————————————————————————————————
Java中的垃圾回收机制
当一个对象没有指向时,Java垃圾回收机制会在适时的回收空间。
———————————————————————————————————————————
类的成员方法(成员函数)
方法名字的首字母是小写的
定义:
Public 返回数据类型 方法名 (参数列表)
{
语句; //方法(函数)主体
}
类的成员方法(成员函数)--声明
Public int test(int a); /*方法声明*/ 没有方法体
声明的格式
访问修饰符 数据类型 函数名(参数列表);
类的构造方法
1、 构造方法名和类名相同
2、 构造方法没有返回值
3、 主要作用是完成对新对象的初始化
4、 在创建新对象的时候,系统自动调用该类的构造方法
5、 一个类可以有多个构造方法
6、 每个类都有一个默认的构造方法,在自己写过一个构造方法后,这个默认的构造方法将会被覆盖,如果还想用这个默认的构造方法,则需要自己重新创建。
--------------------------------------------------------------------------------------------------------------------------
This
this是属于这个创建的对象的,而不是类的。
--------------------------------------------------------------------------------------------------------------------------
静态变量(类变量)
什么是类变量?
静态变量(类变量)是该类的所有对象共享的一个变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。
如何定义静态变量(类变量)?
定义语法:
访问修饰符 static 数据类型 变量名;
如何访问静态变量(类变量)?
类名.类变量名 或者 对象名.类变量名
注意:在类定义创建时,静态变量就已经创建了,而不是在对象实例化时才创建。
--------------------------------------------------------------------------------------------------------------------------
静态方法(类方法)
静态方法是属于所有对象的一个方法
静态方法只能访问静态变量不能访问非静态变量
非静态方法既可以访问静态变量又能访问非静态变量
注意: java中静态变量用静态方法去访问
--------------------------------------------------------------------------------------------------------------------------
JAVA的四大特征
抽象
把一类事物的共有的属性和行为提取出来,形成一个物理模型(模板)。这种研究问题的方法称为抽象。
封装
把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行从操作。
访问控制修饰符
访问级别 访问控制修饰符 同类 同包 子类 不同包
公开 public T T T T
受保护 protected T T T N
默认 没有修饰符 T T N N
私有 private T N N N
--------------------------------------------------------------------------------------------------------------------------
包
包的三大作用
1、区分相同名字的类
2、当类很多时,可以很好的管理类
3、控制访问范围
包-打包命令(放开头)
package com.shunping(包名); 作用:将编译后的字节码文件放进包中
包-命名规范
小写字母 比如: com.sina.shunping
包-如何引入包
Import 包名;
--------------------------------------------------------------------------------------------------------------------------
继承
继承可以解决代码复用,通过extends语句来声明继承父类,这样子类就会自动拥有父类定义的某些属性和方法。
class 子类 extends 父类
注意:
1、 父类中用 public、protected和默认修饰符的属性和方法可以被子类继承,父类的private修饰符的属性和方法不能被子类继承。
2、 子类最多只能继承一个父类
3、 Java所有类都是object的子类
方法的重载(overload)
方法重载就是类的同一种功能的多种实现方式,到底采用哪种方式,取决于调用者给出的参数。
注意:
1、 方法名相同
2、 方法的参数类型、个数,顺序至少有一项不同
3、 方法返回类型可以不同
如果只是返回类型不同,不能构成重载
4、 方法的修饰符可以不同
如果只是修饰符不同,不能构成重载
方法覆盖(override)
1、方法覆盖就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的那个方法。不需要访问修饰符相同。
2、子类方法不能缩小父类方法的访问权限。比如父类是public,子类不能是protected。
但是,子类方法可以放大父类方法的访问权限。
多态
一个父类的引用类型变量可以被用来指向不同的子类的实体(实例),访问时只需使用这样的一个父类的引用类型变量就可以访问各种不同状态的子类的实体。
1、 java允许父类的引用变量引用它的子类的实体(实例)
如: Animal animal = new Cat(); //这种转换自动完成
2、??? 子类的引用变量引用它的父类的实体(实例)
public class Demo5 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//多态
/* Cat cat = new Cat();
cat.cry();
Dog dog = new Dog();
dog.cry();
*/
/* Animal an = new Cat();
an.cry();
an = new Dog();
an.cry();
*/
Master master = new Master();
master.feed(new Dog(), new Bone());
master.feed(new Cat(), new Fish());
}
}
//主人类
class Master
{
//给动物喂食物
public void feed(Animal an,Food f)
{
an.eat();
f.showname();
}
}
class Food
{
String name;
public void showname()
{
}
}
class Fish extends Food
{
public void showName()
{
System.out.println("鱼");
}
}
class Bone extends Food
{
public void showName()
{
System.out.println("骨头");
}
}
//动物类
class Animal
{
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//动物会叫
public void cry()
{
System.out.println("不知道怎么叫");
}
//动物可以吃
public void eat()
{
System.out.println("不知道吃什么");
}
}
class Dog extends Animal
{
//狗叫
public void cry()
{
System.out.println("汪汪叫");
}
public void eat()
{
System.out.println("狗爱吃骨头");
}
}
class Cat extends Animal
{
//猫叫
public void cry()
{
System.out.println("喵喵叫");
}
public void eat()
{
System.out.println("猫爱吃鱼");
}
}
-----------------------------------------------------------------------------
抽象类
1、用abstract 关键字来修饰一个类时,这个类就叫抽象类。
2、用abstract 关键字来修饰一个方法时,这个方法就叫抽象方法。
3、抽象类不能实例化。
4、抽象方法不能有主体。如: abstract void aaa() { };
5、当一个类中的方法是抽象时,要求这个类也是抽象类。
6、抽象类不一定包含abstract方法(抽象方法),但可以包含实现的方法。
7、当一个类继承的父类是抽象类的话。那这个类就需要把继承的抽象父类中的所有抽象方法全部实现。
接口
1、接口中可以包含一些没有实现的方法,当一个类实现了这个接口,那么就要求这个类把这个接口的所有方法都实现。
2、实现了接口的类,可以把类的实体指向接口类的引用。即可以通过接口的引用调用实现接口的类的实体。
注意:
1、 接口不能被实例化
2、 接口中的所有方法都不能有实体 如:void aaa() { };
3、 一个类可以实现多个接口
4、 接口中可以有变量(变量不能用 private和protected修饰)
A、接口中的变量本质上都是static的(加不加static都一样),而且是final类型的
B、 在java开发中,通常把经常使用的变量,定义在接口中,作为全局变量使用。
访问形式:接口名.变量名
5、 接口不能继承类,但是接口可以继承接口。(继承了别的接口后,实现该接口的类在实现本接口的方法的同时还要实现继承的接口的方法)
6、 接口体现了程序设计的 多态和高内聚低耦合
以上是关于类的相关知识(封装继承多态方法构造方法接口抽象类静态方法静态变量等)的主要内容,如果未能解决你的问题,请参考以下文章