构造代码块和static案例接口interface

1构造代码块和static案例

1,1分析过程

计数器

    记录用户的登录次数,当前网站访问人数。。。

自动生成用户ID号

    会员ID号不可以重复,而且是用户在申请账号时自动生成!!!

分析

1程序不退出,ID号始终处于一种记录状态,保存下一个用户的ID号

2用户提供不管多少数据,都要给予一个对应的ID号

解决

    ID号始终处于一种记录状态

1这里需要一个变量来保存ID号

int类型

局部变量:

   局部变量在方法内,方法运行结束,局部变量销毁,无法作为持久化保存【不能使用】

成员变量:

    成员变量保存在对象之中,每一个对象保存的数据是不一样的

    而且需要操作对象来进行获取,对象是存在可能性在一定条件下被销毁的

   不具有持久性,操作较为繁琐

静态成员变量:

整个代码运行周期都存在,和对象无关,可以直接通过类名操作,该变量保存在内存数据区,是一个共享资源

2用户提供不管多少数据,都要给予一个对应的ID号

用户使用不同的构造方法,都要能够赋值对应ID号,ID号不是用户提供的!!!

构造代码块不关你调用那一个new + 构造方法,都要执行对应的操作

package com.qfen.rxs;

public class Vip {

private int id;

private String name;

private int age;

private String address;

private static int count = 1;

{

id = count;

count += 1;

}

public Vip() {}

public Vip(String name) {

this.name = name;

}

public Vip(String name, int age) {

this.name = name;

this.age = age;

}

public Vip(String name, int age, String address) {

this.name = name;

this.age = age;

this.address = address;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

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 String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public static int getCount() {

return count;

}

public static void setCount(int count) {

Vip.count = count;

}

@Override

public String toString() {

return  "Vip [id=" + id + ",nmae" + name + ",age= " +age+",address=" + address + "]";

}

}

2接口【重点】

2.1java中定义接口的格式

关键字:

interface 接口

UI Design User Interface

格式:

interface 接口名{

成员变量

成员方法

}

要求

1接口名大驼峰命名法

2成员变量【缺省属性】public static final定义时必须要初始化

3成员方法【缺省属性】public abstract 方法没有方法体

interfaceA{

int num = 10;

void test();

}

2.2java中类【尊从】接口格式

关键字

impments

格式:

class A impments B {

}

A类是B接口的实现类

A类尊从B接口

2.3一个类可以同时遵从多个接口

package com.qfen.rxs;

interface C{

void testC();

}

interface D{

void testD();

}

interface E{

void testE();

}

class F implements C,D,E{

@Override

public void testC() {

System.out.println("遵从接口E,实现testC方法");

}

@Override

public void testD() {

System.out.println("遵从接口E,实现testD方法");

}

@Override

public void testE() {

System.out.println("遵从接口E,实现testE方法");

}

}

public class Demo2 {

}

2.4接口可以继承接口

关键字

extends

package com.qfen.rxs;

interface Usb1_0{

void usb1_0();

}

interface Usb2_0{

void usb2_0();

}

interface Usb3_0{

void usb3_0();

}

interface UsbMi extends Usb1_0, Usb2_0, Usb3_0 {

void usbMi();

}

class MiGameComputer implements UsbMi {

@Override

public void usb1_0() {

System.out.println("兼容USB1.0");

}

@Override

public void usb2_0() {

System.out.println("兼容USB2.0");

}

@Override

public void usb3_0() {

System.out.println("兼容USB3.0");

}

@Override

public void usbMi() {

// TODO Auto-generated method stub

}

}

public class Demo3 {

public static void main(String[] args) {

new MiGameComputer().usb1_0();

new MiGameComputer().usb2_0();

new MiGameComputer().usb3_0();

}

}

2.5abstract类遵从接口

abstract修饰的方法

1没有方法体

2必须定义在abstract修饰的类中,或者interface接口内

package com.qfen.rxs;

interface Servlet {

void init();

void service();

}

abstract class BaseServlet implements Servlet{

@Override

public void init() {

System.out.println("BaseServlet实现init方法");

}

}

class MyServlet extends BaseServlet {

@Override

public void service() {

System.out.println("MyServlet实现Servlet方法");

}

}

class MyServlet2 extends BaseServlet {

@Override

public void service() {

System.out.println("MyServlet2实现Servlet方法");

}

}

public class Demo4 {

public static void main(String[] args) {

new MyServlet().init();

new MyServlet().service();

new MyServlet2().init();

new MyServlet2().service();

}

}

2.6JDk1.8新特征default关键字

default关键字可以在接口中使用,用于修饰方法,使用default关键字修饰的方法在接口中是允许有方法体

【默认方法】【非强制重写方法】

package com.qfen.rxs;

interface DefaultInterface {

void test();

default public void testDefault() {

System.out.println("testDefault() 默认方法非强制重写方法");

}

default public void defaultMethod() {

System.out.println("defaultMethod() 默认方法非强制重写方法");

}

}

class Demo implements DefaultInterface {

@Override

public void test() {

System.out.println("强制实现的test方法");

}

@Override

public void testDefault() {

System.out.println("实现类重写default方法");

}

}

public class Demo5 {

public static void main(String[] args) {

new Demo().test();

new Demo().testDefault();

new Demo().defaultMethod();

}

}

3多态【重点】

package com.qfen.rxs;

class Animal {

}

class Tiger extends Animal {

}

class Panda extends Animal {

}

class Monkey extends Animal {

}

public class Demo6 {

public static void main(String[] args) {

Animal animal = new Animal();

Tiger tiger = new Tiger();

Panda panda = new Panda();

Monkey monkey = new Monkey();

showAnimal(animal);

showAnimal(tiger);

showAnimal(panda);

showAnimal(monkey);

Panda p = (Panda)getAnimal();

//Animal animal1 = getAnimal();

System.out.println(p);

}

private static Panda getAnimal() {

// TODO Auto-generated method stub

return new Panda();

}

private static void showAnimal(Animal animal) {

// TODO Auto-generated method stub

System.out.println(animal);

}

}

3.2小总结

1一个方法需要的参数是父类,传入实际参数是父类对象本身,或者其子类对象都是Ok的

2一个方法返回值类型是父类,实际返回的数据时父类对象本身或者其子类对象也是Ok

3引用数据类型之间的强制类型转换时语序使用,但是要求明确真实数据类型是一致的,不然会导致异常ClassCastException

package com.qfen.rxs;

interface USB {

void connect();

}

class Mouse implements USB {

@Override

public void connect() {

System.out.println("鼠标控制光标");

}

}

class Logi extends Mouse {

@Override

public void connect() {

System.out.println("Logi Master 2S");

}

}

class Keyboard implements USB {

@Override

public void connect() {

System.out.println("键盘敲代码");

}

}

class IKBC  extends Keyboard {

@Override

public void connect() {

System.out.println("IKBC C87 ");

}

}

class Computer {

public void useUSBInterface(USB usb) {

usb.connect();

}

}

public class Rxs {

public static void main(String[] args) {

Computer computer = new Computer();

Mouse mouse = new Mouse();

Keyboard keyboard = new Keyboard();

computer.useUSBInterface(mouse);

computer.useUSBInterface(keyboard);

computer.useUSBInterface(new Logi());

computer.useUSBInterface(new IKBC());

}

}

3.3总结

1一个方法需要的参数是usb接口但是传入的对象时USB接口的直接实现类或者间接实现类都是可以的

2代码整个过程中是完全符合生活逻辑

3.4这其实是多态【背】

1父类的引用指向子类的对象

2或者接口的应用指向遵从接口的类对象

你可能感兴趣的:(构造代码块和static案例接口interface)