构造代码块和static案例,接口interface
1. 构造代码块和static案例
1.1分析
计数器
记录用户的登陆次数,当前网站的访问人数...
自动生成用户ID号
会员ID号不可以重复,而且是用户在申请账号时自动生成!!!
分析:
1. 程序不退出,ID号始终处于一种记录状态,保存下一个用户的ID号
2. 用户提供不管多少数据,都要给予一个对应的ID号
解决:
ID号始终处于一种记录状态
1. 这里需要一个变量来保存ID号
int类型
局部变量:
局部变量在方法内,方法运行结束,局部变量销毁,无法作为持久化保存。
【不能使用】
成员变量:
成员变量是保存在每一个对象中,而且每一个对象中保存的数据是不一样的,
而且需要操作对象来进行获取,对象是存在可能性在一定条件下被销毁的。
不具有持久性,操作较为繁琐。
静态成员变量:
整个代码运行周期内始终存在,并且和对象无关,不会受到对象的影响。
可以直接通过类名操作,该变量保存在内存数据区,是一个共享资源。
2. 用户提供不管多少数据,都要给予一个对应的ID号
用户使用不同的构造方法,都要能够赋值对应ID号,ID号不是用户提供的!!!
构造代码块不关你调用那一个new + 构造方法,都要执行对应的操作!!!
1.2代码实现
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;
}
@Override
public String toString ( ) {
return "Vip [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]" ;
}
}
2.接口
2.1定义格式
关键字:
interface 接口
UI Design User Interface
格式:
interface 接口名 {
成员变量
成员方法
}
要求:
1. 接口名要求符合命名规范,大驼峰命名法!!!见名知意
2. 成员变量【缺省属性】 public static final 定义时必须初始化
3. 成员方法【缺省属性】 public abstract 方法没有方法体
interface A {
int num = 10 ;
void test ( ) ;
}
public class Demo1 {
}
2.2 Java中类【遵从】接口的格式
关键字:
implements
格式:
class A implements B {
}
A类是B接口的实现类
A类遵从B接口
class B implements A {
@Override
public void test ( ) {
System. out. println ( "B类遵从接口A,实现test方法" ) ;
}
}
2.3 一个类可以同时遵从多个接口
implements C, D, E
interface C {
void testC ( ) ;
}
interface D {
void testD ( ) ;
}
interface E {
void testE ( ) ;
}
class F implements C , D, E {
@Override
public void testE ( ) {
System. out. println ( "遵从接口E,实现testE方法" ) ;
}
@Override
public void testD ( ) {
System. out. println ( "遵从接口D,实现testD方法" ) ;
}
@Override
public void testC ( ) {
System. out. println ( "遵从接口C,实现testC方法" ) ;
}
}
public class Demo2 {
}
2.4接口继承接口
使用extends关键字,且接口支持多继承
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 ( ) {
System. out. println ( "小米USB接口" ) ;
}
}
public class Demo3 {
public static void main ( String[ ] args) {
new MiGameComputer ( ) . usb1_0 ( ) ;
new MiGameComputer ( ) . usb2_0 ( ) ;
new MiGameComputer ( ) . usb3_0 ( ) ;
new MiGameComputer ( ) . usbMi ( ) ;
}
}
2.5 abstract类遵从接口
abstract修饰的方法
1.没有方法体
2.必须定义在abstract类内或接口中。
一个abstract修饰的类遵从接口,想对于非abstract修饰的类有什么区别???\
abstract遵从接口不强制实现任何方法!!!
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实现service方法" ) ;
}
}
class MyServlet2 extends BaseServlet {
@Override
public void service ( ) {
System. out. println ( "MyServlet2实现service方法" ) ;
}
}
public class Demo4 {
public static void main ( String[ ] args) {
new MyServlet ( ) . init ( ) ;
new MyServlet ( ) . service ( ) ;
System. out. println ( "--------------------" ) ;
new MyServlet2 ( ) . init ( ) ;
new MyServlet2 ( ) . service ( ) ;
}
}
2.6 JDK1.8新特征 default关键字
JDK1.8 更新特征
default关键字可以在接口中使用,用于修饰方法,使用default关键字修饰的方法在接口中是允许有方法体
【默认方法】【非强制重写方法】
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. 多态【重点】
例1
class Animal {
}
class Tiger extends Animal {
}
class Panda extends Animal {
}
class Monkey extends Animal {
}
public class Demo1 {
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) ;
System. out. println ( "--------------------------------" ) ;
Panda p = ( Panda) getAnimal ( ) ;
System. out. println ( p) ;
}
public static void showAnimal ( Animal animal) {
System. out. println ( animal) ;
}
public static Animal getAnimal ( ) {
return new Panda ( ) ;
}
}
例2
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 270 -/+ RMB" ) ;
}
}
class Computer {
public void useUSBInterface ( USB usb) {
usb. connect ( ) ;
}
}
public class Demo2 {
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 ( ) ) ;
}
}
多态:
1. 父类的引用指向子类的对象
2. 或者接口的引用指向遵从接口的类对象
这就是多态